在无限循环之前不会打印Print语句

在尝试调试一些C代码时,我注意到如果置于无限循环之前,printf()将不会执行。 有人知道为什么吗? 实际上它不是那么大的交易,但对于调试来说这是一场噩梦。

#include int main() { int data; printf("This prints fine.\n"); printf("Enter data: "); scanf("%d", &data); printf("This should print but it doesn't.\n"); while(1) { //Infinite Loop } return 0; } 

在调用printf()时,在程序终止或遇到换行符后显示输出。 但是由于你在printf()之后调用无限循环,程序不会终止并且不会显示缓冲区的输出。

使用fflush(stdout)强制显示缓冲区的输出

stdout标准输出流是应用程序输出的默认目标。 在大多数系统中,它通常默认指向文本控制台(通常在屏幕上)。

fflush()函数会导致系统清空缓冲区

尝试__fpurge(stdout)它将清除输出缓冲区

它们是一个称为行缓冲区和块缓冲区的概念。 你要写入屏幕的每件事都是缓冲区。 行缓冲区意味着当新行[\ n]发现它“刷新缓冲区,这意味着你的字符串将在屏幕上打印。块缓冲区意味着它们将是固定大小的块,直到除非该块填满它”将不会打印在屏幕。 在上面的例子中,新行[\ n]足以打印