SUMMARY
When a file is open in text mode, an attempt to read lines of text
by using the
Fscanf function may fail and only one line of text is read
from the file.
The delimeter is set to "[^\n]". The
Fscanf function reads up to but does
not include the delimiting character. Therefore, the file stream stops at
the first '\n' in the file. Subsequent
Fscanf function calls fail because the file
pointer remains at the delimiting character and the
Fscanf function cannot advance the
function pointer past it.
To move the file pointer past the
delimiting character, use one of the following two methods:
The following code sample demonstrates this problem. The code sample should read and print
lines from a text file until it reaches EOF. However, the code sample reads only the
first line from the file. Since the end of file character has not been
found, the code sample runs in an infinite loop if the file
stream contains a "\n" character.
Code sample
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line)) != EOF )
{
printf("Line = %s \n",line);
}
The following code example demonstrates the second method above to work around
this problem:
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);
}