[C] Aprire un file e stampare N parole
Salve, ho questo esercizio di cui non riesco a trovare la soluzione:
Scrivere una funzione ed un che riceve come parametro un nome del file di testo e stampa i primi N vocaboli.
Il numero N è inserito dall'utente.
NON riesco a costruirmi l'iterazione che mi permette di leggere N PAROLE.
Con questa struttura:
fp=fopen(file, "r");
if(fp==NULL)
printf("impossibile aprire il file \n");
else{
while( !feof(fp) ){
fscanf( fp, "%s", string);
printf("%s", string);
}
}
fclose (fp);
Leggo le parole tutte attaccate.
Devo imporre un'iterazione ma non riesco a venirne a capo.
Grazie per l'attenzione.
Scrivere una funzione ed un che riceve come parametro un nome del file di testo e stampa i primi N vocaboli.
Il numero N è inserito dall'utente.
NON riesco a costruirmi l'iterazione che mi permette di leggere N PAROLE.
Con questa struttura:
fp=fopen(file, "r");
if(fp==NULL)
printf("impossibile aprire il file \n");
else{
while( !feof(fp) ){
fscanf( fp, "%s", string);
printf("%s", string);
}
}
fclose (fp);
Leggo le parole tutte attaccate.
Devo imporre un'iterazione ma non riesco a venirne a capo.
Grazie per l'attenzione.
Risposte
fscanf ignora gli spazi vuoti, come puoi vedere tu stesso nelle specifiche dell'API. Prova ad aggiungere uno spazio prima di %s, così " %s".
Quando si usa %s gli spazi vengono già ignorati e non c'è alcun bisogno di inserire lo spazio prima. Quello dello spazio è un problema di %c. In questo caso il motivo per cui le stringhe vengono lette tutte attaccate è molto semplice: vengono lette separatamente ma scritte tutte attaccate in printf.. Se vuoi stamparle separate devi inserire uno spazio o un carattere di a capo dopo la stringa nella stringa di formato di printf. Per fare un ciclo che legge N parole puoi aggiungere un contatore e aggiungere una condizione al ciclo per cui va avanti solo finché il contatore è minore di N.
Il risultato è lo stesso, l'importante è capire il meccanismo dietro la stringa di formattazione.