这是我的代码,我在c
中遇到有关数据类型的问题#include<stdio.h>
int main()
{
int a,b;
scanf("%d",&b);
printf("%d",b);
}
当输入任何字符而不是整数值时它总是打印32.我不知道为什么打印32。
答案 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);
答案 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
。