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

时间:2012-12-02 08:22:07

标签: c compiler-construction printf infinite-loop scanf

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

3 个答案:

答案 0 :(得分:2)

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

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

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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