scanf()如何读取未格式化的输入?

时间:2015-01-15 12:37:12

标签: c

解释在这种情况下,当字符串未格式化但仍然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()是如何工作的?

4 个答案:

答案 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;
}