【发布时间】:2015-06-15 11:29:24
【问题描述】:
我正在使用代码块,它给其他编译器提供不同的输出,我找不到解决方案。这个程序中未定义的行为是什么,有什么解决方案可以避免它吗?
这是在只有 3 和 4 的数字系统中打印第 n 个数字的代码。
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,i,value;
scanf("%d",&n);
value=i=0;
while(n>0)
{
if((n%2)==0)
{
value+=4*pow(10,i);
}
else
{
value+=3*pow(10,i);
}
n=(n-1)/2;
i=i+1;
}
printf("\nThe number is : %d",value);
}
它适用于最大 6 的数字。大于 6 的数字的输出比实际应该的少一。例如。如果 n=7,output=332 应该是 333。
编辑:提供带大括号的完整代码。
【问题讨论】:
-
标题中问题的答案实际上取决于语言,它是如何设计和指定的。但总的来说,
i = i + 1是一个定义明确的操作。 -
至于你的问题,它看起来像一些C代码,并且在C中缩进并不重要,这意味着所示sn-p中
else部分的代码只是对@的赋值987654324@ 和其他两个语句在else之外。 -
总是使用大括号!除非你想在 Apple 工作,否则就是这样。
-
提供实际代码!!
-
也提示,'double pow(double x, double y)'
标签: c increment undefined-behavior