所以我想知道如果用户在整数变量中输入字符会发生什么,例如:
main()
{
int number;
printf("Print a number:");
scanf(" %d", &number);
printf("The result is:%d", number);
return 0;
}
我输入了字符,结果是:1986895412
这是1986895412在公羊的一个地方吗?
答案 0 :(得分:7)
在这种情况下,scanf
指令失败。引用this answer(基本上改述了规范的定义):
%d转换说明符要求将输入文本格式化为 十进制整数。如果不是,则转换失败并且字符 导致转换失败的原因留在输入流中。
因此,number
保留与指令之前的值相同。由于您没有使用某个定义的值(如int number = 0
)对其进行初始化,因此它只是一些随机垃圾值。在你的情况下碰巧等于1986895412
。
答案 1 :(得分:1)
检查scanf()
的回复。键入字符时,将出现相应的结果。
if (1 == scanf("%d", &number)) {
printf("The result is:%d", number);
}
else {
printf("Invalid data entered. `number` not changed\n");
}
注意:代码的int number;
未初始化,因此其值可以是任何int
。如果输入无效,则number
未更改,代码会打印未初始化的number
,其刚刚发生的值为“1986895412”。明天可能会有所不同。
注意:不需要" %d"
中的前导空格,因为%d
本身会消耗前导空格。
答案 2 :(得分:0)
由于数字尚未初始化且scanf()
失败,printf()
会引发未定义的行为,读取未初始化的变量number
。任何事情都可能发生。
所以这里有两个要吸取的教训: