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

Dra*_*olf 0 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;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*get 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和其他一些受支持的平台.我们在Windows上没有Pty(或类似的东西),因此交互式控制台模式程序无法按预期工作.

[...]

Eclipse无法刷新它无法控制的缓冲区.刷新"\n"将指示行缓冲模式,这在Windows上目前是不可能的,因为我试图解释.