我正在用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;
}
答案 0 :(得分:10)
代码是正确的,并且应该为任何符合要求的实现打印sum: 1785
。
这是猜测(更新:结果是正确的),但......
您已将源文件命名为test.c
,并使用以下命令对其进行编译:
$ gcc test.c -o test
(或类似的东西)并执行:
$ test
,不产生任何输出。
问题是test
是标准的Unix命令(在某些shell中也是内置命令)。当您为shell键入命令名时,它首先查找内置命令,然后查找$PATH
环境变量中指定的目录中的可执行文件。
要在当前目录中执行命令,请在名称前添加./
:
$ ./test
sum: 1785
$
这适用于当前目录中的任何命令。有许多内置命令,您无法合理地避免与它们发生冲突。通过键入./whatever
来培养在当前目录中运行可执行文件的习惯意味着名称冲突无关紧要。
(不要试图将.
添加到$PATH
的前面;这很危险。想想如果cd
进入目录并键入{{1}会发生什么情况如果那里恰好有恶意ls
命令。)
答案 1 :(得分:0)
您的计划没有任何问题。它有可以工作。尝试使用重定向运行它:
./a.out > myout
..看看你是否得到任何输出。如果没有,我怀疑某种标准库不匹配存在问题。
检查的另一个选项是使用SUN C编译器而不是gcc构建,看看是否有效。如果是这样,gcc就是罪魁祸首。