Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C printf()在do while循环之前不工作_C_Eclipse_Codeblocks - Fatal编程技术网

C printf()在do while循环之前不工作

C printf()在do while循环之前不工作,c,eclipse,codeblocks,C,Eclipse,Codeblocks,我尝试运行以下代码: printf("Enter a character."); printf("\n"); do { ch = getch(); system("cls"); putchar(ch); } while(ch != '.'); 上述代码在代码块上运行良好,但在EclipseIDE上不起作用。事实上,do while循环之前的printf语句不起作用,但是如果我禁用do while语句,prin

我尝试运行以下代码:

printf("Enter a character.");
printf("\n");

do {
    ch = getch();
    system("cls");
    putchar(ch);
} while(ch != '.');
上述代码在代码块上运行良好,但在EclipseIDE上不起作用。事实上,
do while
循环之前的
printf
语句不起作用,但是如果我禁用
do while
语句,printf语句在eclipse上可以正常工作。你能解释一下为什么会这样吗?

也许试试这个

printf("Enter a character.\n");
fflush(stdout);

do {
    ch = getch();
    system("cls");
    putchar(ch);
} while(ch != '.');

我认为这是因为您的输出缓冲区(printf)没有刷新。

在Eclipse下运行的loopA程序的行为不一定与直接从命令行运行程序的行为相同,因为标准I/O通道通常不会被视为“交互设备”,所以请尝试在该程序之前添加
fflush(stdout)
(终端),因此输出变得完全缓冲,并且在从标准输入输入之前不会自动刷新标准输出(这无论如何不受C标准的保证,尽管当输出设备是终端时,大多数实现在读取标准输入之前刷新标准输出)。是什么使某些IDE在不必写入fflush(代码块)的情况下刷新输出缓冲区,以及其他需要手动添加fflush(eclipse)的IDE?我认为从高级/低级语言到机器语言的代码翻译因编译器而异。有些编译器使用其他编译器不使用的技术,因为并非所有编译器的构造都是相同的。对不起,编译器指的是IDE,对吗?因为我认为代码块和eclipse都使用gcc作为编译器。这就是为什么我对一个IDE感到困惑的原因,您不需要放置fflush,而在另一个窗口中则需要。这与运行程序的“终端窗口”有关。