我在这里看到了各种各样的答案,描述了pow
C 中函数的奇怪行为.
但我在这里有一些不同的问题.
在下面的代码我初始化int x = pow(10,2)
和int y = pow(10,n)
(int n = 2)
.
在第一种情况下,当我打印它显示的结果时100
,在另一种情况下它出来了99
.
我知道pow
返回double
它会在存储时被截断int
,但我想问为什么输出会有所不同.
CODE1
#include<stdio.h>
#include<math.h>
int main()
{
int n = 2;
int x;
int y;
x = pow(10,2); //Printing Gives Output 100
y = pow(10,n); //Printing Gives Output 99
printf("%d %d" , x , y);
}
Run Code Online (Sandbox Code Playgroud)
Output : 100 99
为什么输出结果不同.?
我的gcc版本是4.9.2
更新:
代码2
int main()
{
int …
Run Code Online (Sandbox Code Playgroud) 我做了以下程序
#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)
现在在上面的程序中,如果输入4294967298
Output Comes Out To Be Be 2
,并且在stackoverflow上,答案是说,如果输入的数字超出要求的范围,scanf
则将存储UINT_MAX
并打印出来,这受该答案的启发,并进行了讨论这是错误的,等等。我自己尝试过,但是在进行模数运算后,它在打印范围后却没有这种表现。
如果可以指出标准对此有何评论,那将非常有帮助。
我读了另一个答案,关于该问题的两个答案都矛盾,没有人给出正确的答案,所选答案在该主题上有所不同。
是否依赖于实现?
许多人在这个问题上似乎有所不同,如果您能支持参考标准的论点,将不胜感激。
如果有人对此问题有任何疑问,请在评论中告诉我。