|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
[C] Dubbio su soluzione
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;
}
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 |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
la scanf restituisce il numero di argomenti letti. nonostante esista la costante EOF spesso è preferibile utilizzare un controllo come quello del tuo professore.
fino a che la fscanf restituisce 1 puoi stare certo che l'argomento è stato letto correttamente. la return invece è un if fatto con i ? e i : . la sintassi è condizione ? vero : falso; al posto di vero va messa l'istruzione da eseguire se la condizione è vera, su falso l'istruzione per il falso. è molto brutta da scrivere e è molto meno leggibile, ma in alcuni casi è più comodo. a mio parere cmq perdi così tanto in leggibilità che non vale la pena di utilizzarlo. ciao Ultima modifica di NA01 : 13-06-2005 alle 20:39. |
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
cioès e ho capito bene significa
se k == 0 è vero allora ritorna la stringa...se k == 0 è falso ritorna NULL? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
Quote:
per le if semplici è molto bello secondo me come stile. |
|
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
ah omk grazie mille...mi hai chiarito un dubbio...cmq mi fà un po' schifo come notazione..credo che userò sempre le mie amate if
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
Quote:
|
|
|
|
|
|
|
#7 | |
|
Bannato
Iscritto dal: Mar 2004
Città: Roma
Messaggi: 2688
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Non e' proprio una questione di compattezza ma anche di stile.
Quella notazione non va usata solo dagli americani, ma ogni volta che si deve usare un'istruzione return() dentro a degli if() Scrivere: Codice:
return (k == 0 ? str : NULL); Codice:
if (k == 0)
return str;
else
return NULL;
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
è la sfida tra te e il numero di caratteri che scrivi.Il codice non è che migliora alla fine ti basi su ottimizzazione di codice dei vari compilatori Il miglior programma è quello che anche se lo riprendi 10 mesi dopo ha una sintassi leggibile il + velocemente possibile e chiara ~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#12 | |
|
Bannato
Iscritto dal: Mar 2002
Città: Pescara - 未婚・恋人なし Moto: Honda CBR 1000 RR Casco: XR1000 Diabolic 3
Messaggi: 27578
|
Quote:
|
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Jun 2002
Città:
Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
|
Quote:
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio. Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Jul 2004
Città: Napoli
Messaggi: 2029
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:25.











è la sfida tra te e il numero di caratteri che scrivi.








