我编写了以下代码来模拟回调。但是这个卡住了,甚至不打印“内部主”。我在我的unix机器和在线编译器上尝试了这个但是行为相同。我错过了什么吗?
#include <stdio.h>
#include <unistd.h>
void sleep_50sec()
{
printf("inside sleep_50sec");
sleep(50);
}
int main()
{
int i;
printf("inside main");
sleep(1);
for( i =0; i < 100;i++)
{ printf("Loop %d",i);
sleep_50sec();
}
return 0;
}
输出
root@xyz> ./a.out
答案 0 :(得分:3)
打印到\n
时添加stdout
。
printf("inside main\n");
需要\n
的原因是printf
在达到stdout
后将数据刷新到\n
。
您可以打印到stderr
以立即查看您的数据,而无需使用\n
:
fprintf(stderr, "test");
顺便说一下,当调用printf()
输出时会写入stdout
。因此printf(...)
与fprintf(stdout, ...)
答案 1 :(得分:0)
您没有看到任何打印内容的原因是因为crt
(C运行时)缓冲了您的输出,并且只会在累积K个字符后输出到屏幕。一种解决方案是使用&#39; \ n&#39; - 这提示crt
已写入完整的行,并且应将其打印到屏幕上。另一种解决方案是隐式刷新stdout
,如下例所示:
#include <stdio.h>
#include <unistd.h>
void sleep_50sec()
{
printf("inside sleep_50sec");
fflush(stdout);
sleep(50);
}
int main()
{
int i;
printf("inside main");
fflush(stdout);
sleep(1);
for( i =0; i < 100;i++)
{ printf("Loop %d",i);
fflush(stdout);
sleep_50sec();
}
return 0;
}
答案 2 :(得分:0)
您必须清空stdout
。它可以通过格式字符串中的'\n'
字符或fflush
命令来完成:
void sleep_50sec() {
printf("inside sleep_50sec");
fflush(stdout);
sleep(50);
}