Altro esercizio..pls helpme
Ecco l'ennesimo esercizio del proff risolto prima dell'esame.
codice:
Esercizio 2 (max 10 punti)
Scrivere una funzione, con prototipo int Inv(char *nameF, char *invF), che legge il file di tipo testo il cui nome è nella
stringa nameF, contenente una sequenza di stringhe separate da spazi, e crea un nuovo file di testo, con nome dato dalla stringa invF,
scrivendoci la sequenza inversa e ritorna la massima lunghezza delle stringhe. Le stringhe hanno una lunghezza non superiore a 100.
Ad esempio se il file nameF contiene la sequenza giallo verde blu allora il nuovo file deve contenere
blu verde giallo e la funzione deve ritornare 6.
Soluzione Esercizio 2
/* Funzione ausiliaria che ritorna la k-esima stringa del file f. Se tale stringa
non esiste ritorna NULL */
const char *KthStr(FILE *f, int k)
{
static char str[101];
rewind(f);
while (k > 0 && fscanf(f, "%s", str) == 1) k--;
return (k == 0 ? str : NULL);
}
int Inv(char *nameF, char *invF)
{
FILE *f = fopen(nameF, "r"); //Apri il file in lettura
FILE *newF = fopen(invF, "w+"); //Crea ed apri il nuovo file
int nStr = 0, max = 0;
char str[101]; //Calcola il numero di stringhe
while (fscanf(f, "%s", str) == 1) nStr++;
while (nStr > 0) { //A partire dall'ultima stringa,
const char *s = KthStr(f, nStr); //leggi le stringhe in ordine inverso
int len = strlen(s); //e scrivile nel nuovo file,
if (len > max) max = len; //aggiornando il calcolo della
fprintf(newF, "%s ", s); //lunghezza massima.
nStr--;
}
fclose(f);
fclose(newF);
return max;
}
La funzione ausiliaria riceve il numero del k-esima stringa el la ritorna:
ma che vuol dire: while (k > 0 && fscanf(f, "%s", str) == 1) k--; perchè nel corpo del while viene anche inserito che fscanf deve essere == 1 ? Se io gli passo il numro della stringa da restituire e gli dico di ciclare finchè non ci arriva non è uguale?!?!
Altra cosa....
che significa questa riga (mi ci impiccio ancora con le scritture compresse):
return (k == 0 ? str : NULL);
Grazie e scusate la mia estrema ignoranza