C语言 为什么x = 12345678901234567890在y = 1时返回“x小于y”?

dsf9zpds  于 2023-11-16  发布在  其他
关注(0)|答案(1)|浏览(176)
  1. #include <stdio.h>
  2. int main(void){
  3. int x;
  4. int y;
  5. printf("What's x? ");
  6. scanf("%d",&x);
  7. printf("What's y? ");
  8. scanf("%d",&y);
  9. if (x < y)
  10. {
  11. printf("x is less than y\n");
  12. }
  13. else if (x > y)
  14. {
  15. printf("x is greater than y\n");
  16. }
  17. else
  18. {
  19. printf("x and y are equal");
  20. }
  21. return 0;
  22. }

字符串
电话:12345678901234567890 1
输出:x小于y
当x = 12345678901234567890和y = 1时,期望程序返回“x大于y”

raogr8fs

raogr8fs1#

%d转换说明符要求相应的scanf参数是指向int的指针。十进制数字序列12345678901234567890对应的数字很可能在int的(可能是32位类型)可以表示。假设它确实超出范围,当处理指定的输入时,你的程序的行为是未定义的。2这意味着任何事情都可能发生,就语言规范而言。
C23 7.23.6.2/10:
转换的结果放在格式参数后面的第一个参数所指向的对象中,该对象尚未收到转换结果。如果此对象没有适当的类型,或者转换的结果无法在对象中表示,则行为未定义。
(强调部分另加)

相关问题