#include <stdio.h>
int main(void){
int x;
int y;
printf("What's x? ");
scanf("%d",&x);
printf("What's y? ");
scanf("%d",&y);
if (x < y)
{
printf("x is less than y\n");
}
else if (x > y)
{
printf("x is greater than y\n");
}
else
{
printf("x and y are equal");
}
return 0;
}
字符串
电话:12345678901234567890 1
输出:x小于y
当x = 12345678901234567890和y = 1时,期望程序返回“x大于y”
1条答案
按热度按时间raogr8fs1#
%d
转换说明符要求相应的scanf
参数是指向int
的指针。十进制数字序列12345678901234567890
对应的数字很可能在int
的(可能是32位类型)可以表示。假设它确实超出范围,当处理指定的输入时,你的程序的行为是未定义的。2这意味着任何事情都可能发生,就语言规范而言。C23 7.23.6.2/10:
转换的结果放在格式参数后面的第一个参数所指向的对象中,该对象尚未收到转换结果。如果此对象没有适当的类型,或者转换的结果无法在对象中表示,则行为未定义。
(强调部分另加)