解释为什么这对C代码不起作用

时间:2013-07-03 09:25:00

标签: c

参加在线C课程,当我为其中一个家庭作业问题做这个时,它并不像我想要的那样有效。它应该提示用户输入半径,然后进行计算并打印出答案。它的作用是什么都不打印,但执行得很好,当我输入一个数字时,它会打印出提示和答案。

基本上,为什么不提示先输入,因为它是在代码中写的:

int main(void)
{
    float volume, radius;
    printf("Enter the radius of the sphere: \n");
    scanf("%f", &radius);
    volume = (4.0f / 3.0f) * 3.14f * radius * radius * radius;
    printf("%.2f", volume);
    return 0;
}

1 个答案:

答案 0 :(得分:8)

您的代码在我的Visual Studio 2010和Linux / GCC下按预期工作,开头是#include <stdio.h>。但是,我不知道你的开发环境是什么。

尝试在第一个fflush(stdout);之后插入printf


这种行为在Eclipse中很有名(参见https://bugs.eclipse.org/bugs/show_bug.cgi?id=173732)。

Eclipse CTD开发人员Anton Leherbauer在此给出了一些解释:

  

问题是:eclipse控制台不是终端。在unix系统上,   选择的方法是创建一个伪终端(pty)并连接孩子   处理stdio到它。这样子进程的行为完全相同   就像在互动终端中一样。 CDT完全适用于Linux,Mac OS X,   Solaris和其他一些受支持的平台。我们没有Pty(或其他东西   在Windows上,因此交互式控制台模式程序不会   按预期工作。

     

[...]

     

Eclipse无法刷新它无法控制的缓冲区。   刷新“\ n”将表示行缓冲模式,这在我试图解释的Windows上目前是不可能的。