即使使用换行符和fflush(),printf也不起作用

vai*_*dil 1 c printf

我正在编译下面的C代码gcc.编译期间或运行时不会抛出任何错误.我使用了代码gdb,并且最后给出的答案sum是正确的,但printf()屏幕上没有显示任何内容.我已经试过各种组合fprintf(),printf()fflush(),但没有任何工程.

我需要更改什么,以便程序将结果打印到stdout

#include <stdio.h>
#include <stdlib.h>

int main()
{
        int num = 9;
        int i, sum; i = 1, sum = 0;
        while (i < 2 * num) {
                sum = sum + i * i;
                ++i;
        }
        printf("sum: %d\n", sum);
        fflush(stdout);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 10

代码是正确的,应该打印sum: 1785任何符合要求的实现.

这是一个猜测(更新:结果证明是正确的),但......

您已经命名了源文件test.c,并使用以下命令编译它:

$ gcc test.c -o test
Run Code Online (Sandbox Code Playgroud)

(或类似的东西)并执行它:

$ test
Run Code Online (Sandbox Code Playgroud)

它不产生任何输出.

问题是这test是一个标准的Unix命令(在某些shell中也是一个内置命令).当您为shell键入命令名时,它首先查找内置命令,然后查找$PATH环境变量中指定的目录中的可执行文件.

要在当前目录中执行命令,./请在名称前加上:

$ ./test
sum: 1785
$ 
Run Code Online (Sandbox Code Playgroud)

这适用于当前目录中的任何命令.有许多内置命令,您无法合理地避免与它们发生冲突.通过键入来培养在当前目录中运行可执行文件的习惯./whatever意味着名称冲突无关紧要.

(不要试图添加.到你的前面$PATH;这是危险的.想想如果你cd进入一个目录并输入ls会发生什么,如果那里发生了恶意ls命令.)