Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive un problema che si verifica quando si leggono righe di testo usando la Fscanf
funzione .
Versione originale del prodotto: Visual C
Numero KB originale: 60336
Riepilogo
Quando un file è aperto in modalità testo, un tentativo di leggere righe di testo usando la Fscanf
funzione potrebbe non riuscire e solo una riga di testo viene letta dal file. Il delimitatore è impostato su [^\n]
. La Fscanf
funzione legge fino a ma non include il carattere di delimitazione. Pertanto, il flusso di file si arresta al primo \n
nel file. Le chiamate di funzione successive Fscanf
hanno esito negativo perché il puntatore al file rimane in corrispondenza del carattere di delimitazione e la Fscanf
funzione non può avanzare il puntatore della funzione oltre di esso. Per spostare il puntatore del file oltre il carattere di delimitazione, utilizzare uno dei due metodi seguenti:
Aggiornare il codice per usare la chiamata di funzione seguente
Fscanf
:fscanf(stream, "%[^\n]%*c", line)
L'identificatore
%*c
di formato legge un carattere dal flusso di input, ma non lo assegna ad alcun parametro nella chiamata difscanf
funzione.Chiamare la
Fgetc
funzione dopo la chiamata diFscanf
funzione per spostare il puntatore del file oltre il\n
carattere.
L'esempio di codice seguente illustra questo problema. L'esempio di codice deve leggere e stampare righe da un file di testo fino a raggiungere EOF. Tuttavia, l'esempio di codice legge solo la prima riga dal file. Poiché la fine del carattere di file non è stata trovata, l'esempio di codice viene eseguito in un ciclo infinito se il flusso di file contiene un \n
carattere.
Esempio di codice
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF )
{
printf("Line = %s \n",line);
}
Nell'esempio di codice seguente viene illustrato il secondo metodo precedente per risolvere il problema:
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF)
{
fgetc(stream); // Reads in '\n' character and moves file
// stream past delimiting character
printf("Line = %s \n", line);
}