我尝试运行一个 C 源文件,结果它陷入了无限循环。我将相同的代码复制并粘贴到新的源文件 Untitled1 中,并且运行良好。原始源文件和新源文件都保存在桌面上。为什么会发生这种情况?
#include <stdio.h>
int main()
{
int i, j, d, a;
scanf("%d %d", &i, &d);
printf("%d\n", i);
a = 1;
while(i>1)
{
i = i%d;
for(j = 1; j<=a; j++)
{
printf(" ");
}
printf("%d\n", i);
d = d/100;
a++;
}
//////////
return 0;
}
只是 CodesDope 的一个简单练习。目标是打印
1010101
10101
101
1
输入 i=1010101 和 d=1000000 即可得到。
最佳答案
我不能怀疑你的经历,但我不确定你的结论是否正确。首先我们不运行源代码,必须先编译它。这使得您有可能拥有旧的可执行文件,即不反射(reflect)代码的可执行文件。以相同方式编译的相同代码应该产生相同的运行时行为(假设该代码逻辑是正确的)。
由于所有变量都是整数,因此 d
变量可能会变为 0,如果这种情况发生在 i
小于或等于 1 之前,i%d
将导致除以零错误。在 repl.it 上使用 i = 1000 和 d = 77 尝试代码会生成浮点异常,但不同的编译器/环境可能会以不同的方式显示未定义的状态(尽管所有编译器/环境都应该产生错误状态)。
我的建议是删除已编译的可执行文件和任何目标文件(清理您的项目),然后重新编译并比较结果。如果您仍然看到基于相同输出的不同行为,请仔细比较您的源文件(或者如果您使用的是 unix'y 系统,请“比较”它们)。如果您仍然发现差异,请使用您正在使用的两个源文件(即使您发现它们相同)、编译器(名称/版本)和环境(操作系统/版本)更新您的问题。
关于C程序执行成功显然取决于文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58829593/