C 打印对账单赢了';t在无限循环之前打印

C 打印对账单赢了';t在无限循环之前打印,c,compiler-construction,printf,infinite-loop,scanf,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 bu

在调试一些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;
}
#包括
int main()
{
int数据;
printf(“这个打印很好。\n”);
printf(“输入数据:”);
scanf(“%d”和数据);
printf(“应该打印,但不打印。\n”);
而(1)
{
//无限循环
}
返回0;
}
调用printf()时,在程序终止或遇到换行符后显示输出。 但由于在printf()之后调用无限循环,所以程序不会终止,也不会显示缓冲区的输出

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

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


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

try\u fpurge(stdout)。它将清除输出缓冲区

其概念称为行缓冲区和块缓冲区。你想写到屏幕上的每一样东西都会在缓冲区中。行缓冲区意味着当新的行[\n]找到它时,它将刷新缓冲区,这意味着您的字符串将在屏幕上打印。块缓冲区意味着它们的块大小将是固定的,除非该块已满,否则它将不会在屏幕上打印。在上述情况下,新行[\n]足以打印

是的,这很有效。这里到底发生了什么?我更喜欢将调试信息打印到stderr,它通常不会被缓冲。什么平台?编译器版本?这是实际代码吗?如果是这样,为什么您的
include
缺少
#
?您真的在最后一个字符串的末尾有
\n
吗?@user1869992:-请阅读我的答案以获得解释!!!在字符串末尾有
\n
通常足以确保字符串出现在屏幕上
fflush
应该不是必需的。我猜上面的代码是不准确的,最后一个
printf
结尾没有
\n