当我在scanf中输入字符而不是整数值时出现意外结果

时间:2014-09-07 21:05:05

标签: c

这是我的代码,我在c

中遇到有关数据类型的问题
#include<stdio.h>
int main()
{  
int a,b;
scanf("%d",&b);
printf("%d",b);
}

当输入任何字符而不是整数值时它总是打印32.我不知道为什么打印32。

2 个答案:

答案 0 :(得分:3)

打印的值完全是任意的。这是未定义行为的结果,因为b仍然未分配。

在继续操作之前,您需要检查用户是否输入了值。 scanf会返回已处理的项目数,因此除非scanf返回1,否则您的代码不应使用该值,表示已成功读取了一个项目:

int b;
for (;;) { // Repeat forever
    int numRead = scanf("%d",&b);
    if (numRead == 1) {
        // We've got our number; end the loop:
        break;
    }
    printf("You did not enter a number\n");
    // Consume the data that cannot be interpreted as a number.
    // Asterisk means "discard the value":
    scanf("%*s");
}
printf("b=%d\n", b);

Demo.

答案 1 :(得分:0)

如果您尝试以下修改,您可能会获得一些见解:

#include<stdio.h>

int main()
{
    int a, b;
    a = scanf("%d",&b);
    printf("%d %d",a,b);
}

当您键入除整数之外的任何内容时,scanf将返回0,这意味着参数列表中的所有项都未成功填充。这意味着b具有调用scanf之前的任何值。由于永远不会初始化b,因此该值未定义。

P.S。您的main函数应返回int类型,而不是void