解释在这种情况下,当字符串未格式化但仍然scanf()能够从输入字符串中读取整数时输出。
#include <stdio.h>
int main(void)
{
int n;
while (scanf("%d", & n))
printf("%d\n", n);
return 0;
}
示例输入:
1 2 3 4 5 54 34 abcd
输出:
1
2
3
4
5
54
34
输入非常混乱,但输出仍然很干净。 scanf()是如何工作的?
答案 0 :(得分:4)
对于"%d"
说明符,它将忽略空白字符,然后当它到达无效字符non-digit
时,它将返回0
,对于返回的每个数字值1
这是成功匹配的说明符数。
阅读here了解详情。
答案 1 :(得分:3)
scanf("%d", &n)
将为整数返回1(成功读取的值的数量),并且在遇到非数字时会失败并且会破坏while
答案 2 :(得分:1)
scanf忽略空白字符,例如:
\t(ASCII:0x09)
\n(ASCII:0x0a)
blank(ASCII:0x20)
参考:scanf
空格字符:该函数将读取并忽略任何空格 在下一个非空白字符之前遇到的字符 (空格字符包括空格,换行符和制表符 - 见isspace)。格式字符串中的单个空格验证任何内容 从流中提取的空白字符数量(包括 无)。
答案 3 :(得分:0)
在c编程语言中严格定义数据类型。您必须在scanf()函数中输入正确的数据。在你输入任何错误的类型然后它将返回0,这意味着错误。 试着这样做。这个机制对你来说很清楚。
#include <stdio.h>
int n,m;
int main()
{
do{
m = scanf("%d",&n);
printf("Legality: %d Value: %d\n",m,n);
}while(m);
return 0;
}