gpt4 book ai didi

c - scanf ("%79[^\n]",line); 之间的区别vs scanf ("%79[^\n]\n",线) vs scanf ("%79[^\n]s",线)

转载 作者:太空狗 更新时间:2023-10-29 16:01:41 29 4
gpt4 key购买 nike

我正在用 c 编写一个程序来读取文件的内容。代码如下:

   #include<stdio.h>
void main()
{
char line[90];
while(scanf("%79[^\n]\n",line)==1)
printf("%s",line);
}

以上代码读取一个文件内容并显示在屏幕上。

但是

while(scanf("%79[^\n]",line)==1) and while(scanf("%79[^\n]s",line)==1) or while(scanf("%79[^\n]s\n",line)==1) 

不起作用。(它们只显示第一行)

谁能解释一下?

最佳答案

格式 "%79[^\n]" 表示最多 79 个字符,不是 '\n'

当你使用时,

scanf("%79[^\n]s",line)

返回值不应为 1,因为格式说明符中的 s 在读取完所有非 的字符后需要文字 s\n'。换句话说,scanf 报告失败。

当你使用时,

scanf("%79[^\n]\n",line)

它成功了,因为它在末尾找到了文字 '\n'

两者的区别

scanf("%79[^\n]",line)

scanf("%79[^\n]\n",line)

'\n'在第一种情况下留在输入流中,而在第二种情况下被消耗。在第二种情况下,不仅 '\n' 被消耗,而且任何以 '\n' 开始的空格序列也被消耗(感谢@MattMcNabb补充说明)。

如果您希望 scanf 仅使用 '\n',请使用:

scanf("%79[^\n]%*c",line)

关于c - scanf ("%79[^\n]",line); 之间的区别vs scanf ("%79[^\n]\n",线) vs scanf ("%79[^\n]s",线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24418394/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com