我正在用c编写一个程序来读取文件的内容.代码如下:
#include<stdio.h>
void main()
{
char line[90];
while(scanf("%79[^\n]\n",line)==1)
printf("%s",line);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码读取文件内容并将其显示在屏幕上.
但
while(scanf("%79[^\n]",line)==1) and while(scanf("%79[^\n]s",line)==1) or while(scanf("%79[^\n]s\n",line)==1)
Run Code Online (Sandbox Code Playgroud)
不起作用.(它们只显示第一行)
谁能解释一下?
格式"%79[^\n]"表示最多不超过79个字符的所有字符'\n'.
当你使用时,
scanf("%79[^\n]s",line)
Run Code Online (Sandbox Code Playgroud)
返回值不应该是1,因为s格式说明符s在读完所有不是的字符后需要一个文字'\n'.换句话说,scanf报告失败.
当你使用时,
scanf("%79[^\n]\n",line)
Run Code Online (Sandbox Code Playgroud)
它成功了,因为它最终找到了一个文字'\n'.
和...之间的不同
scanf("%79[^\n]",line)
Run Code Online (Sandbox Code Playgroud)
和
scanf("%79[^\n]\n",line)
Run Code Online (Sandbox Code Playgroud)
是'\n'在第一种情况下留在输入流中,而在第二种情况下消耗它.在第二种情况下,不仅'\n'消耗了,而且任何从空格开始的空格序列也'\n'被消耗了(感谢@MattMcNabb进行了额外的澄清).
如果你只想scanf消费'\n',请使用:
scanf("%79[^\n]%*c",line)
Run Code Online (Sandbox Code Playgroud)