C程序执行成功显然取决于文件名

标签 c

我尝试运行一个 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/

相关文章:

将多个字节数组转换为单个长变量

c - 应用于位字段的 typeof/__auto_type 的 GNU C 替换/解决方法

C: 动态链接 OpenSSL 库时出错

c - 需要帮助在控制台应用程序中使用 Windows API 在 C 中创建我自己的 getch() 函数

C - 从 3D 数组中选择 2D 切片

iphone - 将 C 库编译为 iPhone 框架?

c - 使用C程序在Windows中截图并另存为PNG文件

C、跳过初始化静态数组

计数交替向上/向下序列

c - 如何将 char *a[] 复制到 char **b?