|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
[C] Anomalia in programma di ordinamento
Ho la necessità di ordinare un elenco di nomi, formattato in modo particolare (con la tabulazione tra nome e cognome o viceversa), presenti su un file. Il risultato dev'essere riportato su un secondo file.
L'incovazione del programma deve essere seguita da due argomenti, il primo è l'elenco dei nomi esistente ed il secondo quello che deve formarsi. Ovviamente da qui non vi è niente di impossibile ma si è presentata un'anomalia quando lo stesso proramma è stato fatto girare su Ubuntu del mio amico e sul mio Mac: a lui funziona tutto mentre a me non ordina nulla o quasi. Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DIM 20
void sbsort (char **vett, int e);
int main (int argc, char* argv[]) {
unsigned short int ind, i, j, k;
/* Inizio fase di lettura da file */
FILE* fr = fopen (argv[1], "r"); /* Apro il file in lettura */
/* Verifico la corretta apertura del file */
if (fr == NULL) {
printf ("Error: file di lettura non aperto");
exit (1);
}
else printf ("\nLoading...\n");
char* contatti[DIM]; /* Array di Stringhe */
for (i=0; i<DIM; i++) contatti[i] = (char*) malloc (sizeof(char) * 30);
for (ind=0; ((fgets (contatti[ind], DIM-1, fr)) != NULL) && (ind != DIM); ind++);
fclose (fr); /* Chiudo il file precedentemente aperto */
printf("Completato\n");
printf ("\n\tDEBUG 1 - %d nomi presenti su file dopo la lettura\n", ind);
for (k=0; k<ind; k++) {
printf ("\t%s", contatti[k]);
}
sbsort (contatti, ind); /* Ordino array */
/* Inizio fase di scrittuta su file */
FILE* fw = fopen (argv[2], "w"); /* Apro il file di scrittura */
for (j=0; ((fputs (contatti[j], fw)) != EOF) && (j<ind); j++); /* Scrivo sul file */
fclose (fw); /* Chiudo il file di scrittura */
/* Inizio fase di stampa dei contatti a schermo */
printf ("\n\n\tDEBUG 2 - %d nomi presenti su file dopo la scrittura\n", ind);
for (k=0; k<ind; k++) {
printf ("\t%s", contatti[k]);
}
printf ("\n\n");
return 0;
}
/* Funzione che ordina array di stringhe */
void sbsort (char **elenco, int NumeroContatti) {
int i, j;
char *t;
t = (char*) malloc (sizeof(char) * 30); /* Stringa temporanea che conterrà i nomi da sortare */
for (i=0; i<NumeroContatti-1; i++)
for (j=i+1; j<NumeroContatti; j++)
if (strcmp (elenco[i], elenco[j]) == 1) {
strcpy (t, elenco[i]);
strcpy (elenco[i], elenco[j]);
strcpy (elenco[j], t);
}
}
Codice:
Pallino Pinco Rossi Giuseppe Guglielmo Marconi Galileo Galilei Argento Dario Dog Dylan Willer Tex Zanetti Javier
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Sep 2008
Città: Messina
Messaggi: 991
|
up1
...sarebbe importante!
__________________
PC/HTPC: Mac Mini 3,1 late 2009 | My Book Studio 2TB | LG M237WD monitor/tv | Logitech Z4 | Apple Magic Mouse | Apple Wireless Keyboard | Apple Remote Mobile: Samsung Galaxy Wonder i8150 cm9 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
mi pare che il problema sia causato dalla mancanza del carattere terminatore per le stringhe, quindi le operazioni su stringhe non hanno effetto
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:30.



















