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

我制作了以下程序

#include  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上, 答案是说如果你输入的数字超过了所需的范围,那么scanf将存储UINT_MAX并打印出来,受到该答案的启发,并讨论它是错误的等等。 我尝试了自己,并且在进行模运算后,它在打印范围之后不会表现得像这样。

如果可以指出标准所说的内容,那将非常有帮助。

我已经阅读了另一个答案 ,这个问题的答案都是冲突的,没有人给出正确的答案,选定的答案在主题上有所不同。

它是依赖于实现的吗?

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

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

将调用未定义的行为。

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

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

这是未定义的行为。 C11草案说:

[…]转换的结果放在由尚未收到转换结果的format参数后面的第一个参数指向的对象中。 如果此对象没有适当的类型,或者无法在对象中表示转换结果,则行为未定义。