PRB: fscanf() Fails to Read Consecutive LinesLast reviewed: August 18, 1997Article ID: Q60336 |
The information in this article applies to:
SYMPTOMSWhen a file is open in text mode, an attempt to read lines of text with the fscanf() function may fail and only one line of text is read from the file.
CAUSEThe 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() calls fail because the file pointer remains at the delimiting character and fscanf() cannot advance the function pointer past it.
RESOLUTIONUse one of the following two methods to move the file pointer past the delimiting character:
MORE INFORMATIONThe following code demonstrates this problem. It should read and print lines from a text file until it reaches EOF. However, it reads only the first line from the file. Since the end of file character has not been found, the example shown below will run in an infinite loop if the file stream contains a "\n" character.
Sample Code
FILE *stream; char line[80]; while ((fscanf(stream, "%[^\n]", line)) != EOF ) { printf("Line = %s \n",line); }The following code 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); } |
Additional query words: 8.0 9.0 10.0 11.0
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |