原始 KB 编号:
60336
当文件在文本模式下打开时,尝试使用
Fscanf
函数读取文本行可能会失败,并且仅从文件中读取一行文本。 分隔符设置为
[^\n]
。 该
Fscanf
函数读取最多,但不包括分隔符。 因此,文件流在文件中的第一个
\n
位置停止。 后续
Fscanf
函数调用失败,因为文件指针保留在分隔符处,并且
Fscanf
函数无法将函数指针推进到它之后。 若要将文件指针移过分隔符,请使用以下两种方法之一:
更新代码以使用以下
Fscanf
函数调用:
fscanf(stream, "%[^\n]%*c", line)
格式 %*c
说明符从输入流中读取一个字符,但不将其分配给函数调用中的任何 fscanf
参数。
在 Fgetc
函数调用后 Fscanf
调用 函数,将文件指针移到字符之外 \n
。
以下代码示例演示了此问题。 代码示例应从文本文件中读取和打印行,直到它到达 EOF。 但是,代码示例仅读取文件中的第一行。 由于未找到文件字符的末尾,如果文件流包含 \n
字符,则代码示例在无限循环中运行。
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF )
printf("Line = %s \n",line);
下面的代码示例演示了上述第二种方法来解决此问题:
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);