c - 如果我在C中输入超过数据类型范围的数字会发生什么?

标签 c scanf

<分区>

我做了如下程序

#include <stdio.h>

int main()
{
    // Testing Number

    unsigned int num;

    printf("Enter The Number : ");
    scanf("%u" , &num);                  // If I Enter 4294967298
    printf("Your Number is : %u" , num); // Output Comes Out To Be 2
}

现在在上面的程序中,如果输入 4294967298,输出结果为 2,在 stackoverflow 上,answers是说,如果您输入的数字超过要求的范围,那么 scanf 将存储 UINT_MAX 并打印它,受该答案的启发,正在进行的讨论是错误的等等。我自己尝试过,它的行为不是这样的,而是在执行模运算后打印的范围之后。

如果有人能指出标准对此有何说明,那将非常有帮助。

我已阅读其他answer ,并且该问题的两个答案相互矛盾,没有人给出正确的答案,所选答案因主题而异。

是否依赖于实现?

很多人似乎对这个问题持不同意见,如果您能引用标准来支持您的论点,我们将不胜感激。

如果有人发现这个问题有什么问题,请在评论中告诉我。

最佳答案

将调用未定义的行为。

引自 N1570 7.21.6.2 fscanf 函数,第 10 段:

If this object does not have an appropriate type, or if the result of the conversion cannot be represented in the object, the behavior is undefined.

关于c - 如果我在C中输入超过数据类型范围的数字会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42162536/

相关文章:

c - 两个整数相除结果为 0,而我应该得到 1

windows - 如何在 x86_64 程序集中使用 printf 和 scanf?

c - LinkList 写入二进制文件

c - 将变量发送到 c 和 pascal 中的过程

c - 如何使用 fscanf 捕获空间?

复利计算器 - C

c - 从c中的文本文件读取 float 时出现错误值

你能在 C 中定义一个返回 bool 的函数吗?

c - scanf() 将换行符保留在缓冲区中

C - 在多个函数中使用结构