【发布时间】:2021-04-26 14:34:38
【问题描述】:
这段代码可以正常工作:
int main()
{
int i,n=2;
char str[50];
for (i = 0; i < n; i++)
{
puts("Enter a name");
scanf("%[^\n]%*c", str);
printf("%s\n", str);
}
return 0;
}
并读取两个输入,写入它们。
问题:
- 什么是
%[^\n]%*c?特别是%*c?它是如何工作的? - 当我将该行更改为
scanf("%[^\n]", str)时,不需要第二次输入。为什么?
【问题讨论】:
-
它“正常工作”,直到您输入一个在第一个换行符前超过 49 个字符的字符串。
-
手册里都有说明。
-
%[^\n]使用除换行符以外的任何内容。%*c使用换行符。如果省略%*c,则永远不会消耗换行符,随后对 scanf 的调用将返回而不消耗任何内容。在每种情况下,scanf返回 0。您应该始终检查 scanf 返回的值。 -
scanf("%[^\n]", str)工作得很好(除了它是不好的做法并且容易导致未定义的行为)。它只是没有做你期望它做的事情。 -
scanf("%[^\n]", str)不适用于两个输入。它只读取一个输入。但在代码中我想读取两个输入。
标签: c scanf format-specifiers