2

在尝试调试一些 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;
}
4

3 回答 3

2

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

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

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

fflush()函数使系统清空缓冲区

于 2012-12-02T08:30:48.037 回答
0

它们是一个叫做行缓冲区和块缓冲区的概念。您要写入屏幕的所有内容都将在缓冲区中。行缓冲区意味着当有新行 [\n] 找到它时“将刷新缓冲区,这意味着您的字符串将在屏幕上打印。块缓冲区意味着它们的块大小将是固定的,除非该块已满,否则它不会在屏幕。在上述情况下,新行 [\n] 足以打印

于 2012-12-03T12:49:50.220 回答
0

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

于 2012-12-02T10:59:33.043 回答