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

Cur*_*Guy 1 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
}
Run Code Online (Sandbox Code Playgroud)

现在在上面的程序中,如果输入4294967298Output Comes Out To Be Be 2,并且在stackoverflow上,答案是说,如果输入的数字超出要求的范围,scanf则将存储UINT_MAX并打印出来,这受该答案的启发,并进行了讨论这是错误的,等等。我自己尝试过,但是在进行模数运算后,它在打印范围后却没有这种表现。

如果可以指出标准对此有何评论,那将非常有帮助。

我读了另一个答案,关于该问题的两个答案都矛盾,没有人给出正确的答案,所选答案在该主题上有所不同。

是否依赖于实现?

许多人在这个问题上似乎有所不同,如果您能支持参考标准的论点,将不胜感激。

如果有人对此问题有任何疑问,请在评论中告诉我。

Mik*_*CAT 5

未定义的行为将被调用。

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

如果此对象的类型不合适,或者无法在对象中表示转换结果,则该行为未定义。