【问题标题】:printf doesn't work, even with newline and fflush()printf 不起作用,即使使用换行符和 fflush()
【发布时间】:2013-10-08 20:34:20
【问题描述】:

我正在用gcc 编译下面的C 代码。在编译期间或运行时不会引发错误。我用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;
}

【问题讨论】:

  • 我想我会使用那个网站而不是我学校的 SPARC 计算机实验室。谢谢!
  • 我严重怀疑这个问题与您使用 SPARC 系统有关。
  • 那会是什么?我有上面给出的代码,我用gcc test.c -o test 编译,程序什么也不显示,然后继续让我输入另一个命令。
  • 风格 :: 现在 for 循环出了什么问题 := for(i=1; i &lt; 2*num; i++) {blablablah;} 会更可读 ...跨度>

标签: c printf


【解决方案1】:

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

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

您已将源文件命名为 test.c,并使用以下代码对其进行编译:

$ gcc test.c -o test

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

$ test

不产生任何输出。

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

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

$ ./test
sum: 1785
$ 

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

(不要试图将. 添加到$PATH 的前面;这很危险。想想如果您将cd 放入目录并键入ls 会发生什么,如果碰巧有那里有一个恶意的ls 命令。)

【讨论】:

  • 呃,我没有意识到 test 是一个命令。是这个问题,谢谢!
【解决方案2】:

您的程序没有任何问题。它必须工作。尝试使用重定向运行它:

./a.out > myout

..看看你是否得到任何输出。如果不是,我怀疑存在某种标准库不匹配的问题。

另一个要检查的选项是使用 SUN C 编译器而不是 gcc 来构建,看看它是否有效。如果是这样,gcc 就是罪魁祸首。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    相关资源
    最近更新 更多