在尝试调试某些C代码时,我注意到如果置于无限循环之前,printf()将不会执行。有人知道为什么吗?实际上它不是那么大的交易,但对于调试来说这是一场噩梦。
#include<stdio.h>
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;
}
答案 0 :(得分:2)
在调用printf()时,在程序终止或遇到换行符后显示输出。 但是由于你在printf()之后调用无限循环,程序不会终止并且不会显示缓冲区的输出。
使用fflush(stdout)
强制显示缓冲区的输出
<强> stdout
强>
标准输出流是应用程序输出的默认目标。在大多数系统中,它通常默认指向文本控制台(通常在屏幕上)。
fflush()
函数会导致系统清空缓冲区
答案 1 :(得分:0)
尝试__fpurge(stdout)它将清除输出缓冲区
答案 2 :(得分:0)
它们是一个称为行缓冲区和块缓冲区的概念。您要写入屏幕的所有内容都将在缓冲区中。行缓冲区意味着当新行[\ n]发现它“刷新缓冲区,这意味着你的字符串将在屏幕上打印。块缓冲区意味着它们将是固定大小的块,直到除非该块填满它”将不会打印在屏幕。在上面的例子中,新行[\ n]足以打印