gpt4 book ai didi

c - 循环中的打印功能仅在循环退出后打印所有内容

转载 作者:行者123 更新时间:2023-12-04 12:33:38 25 4
gpt4 key购买 nike

我不仅在这段代码中遇到了这个问题,而且在其他一些代码中也遇到了这个问题。

printf 函数放置在 for 循环中。它应该在每次迭代(循环传递)时打印。但它会在循环退出后一次性打印所有内容。

在当前示例中,我使用线程。但是我在编写的其他不涉及线程的程序中遇到了同样的问题。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "threads.h"

ElementPtr RunQ;

void *loop1(void)
{
int i;
while(1)
for(i=1;i<100;i++)
{
printf("\t%d",i);
if(i%8 == 0)
{
printf("\n");
yield();
}
usleep(500000);
}
}

void *loop2(void)
{
int i;
while(1)
for(i=201;i<300;i++)
{
printf("\t%d",i);
if(i%4 == 0)
{
printf("\n");
yield();
}
sleep(1);
}
}

void *loop3(void)
{
int i;
while(1)
for(i=501;i<600;i++)
{
printf("\t%d",i);
if(i%15 == 0)
{
printf("\n");
yield();
}
usleep(500000);
}
}

int main()
{
InitQueue(&RunQ);

printf("\nRunning threads:\n");
start_thread(&loop1);
start_thread(&loop2);
start_thread(&loop3);

run();

return 0;
}

输出完全正确。唯一的是它一次打印每一行,而不是一个一个打印每个数字。所以第一个循环将等待 4 秒,然后一次打印 1 到 8,然后切换到等待 4 秒然后打印的线程 2,依此类推。

它应该一次打印一个数字。我究竟做错了什么?

附言我在 Ubuntu 14.10 上使用 gcc 编译器

最佳答案

stdout流被缓冲并且您​​要打印的数字仅在您打印换行符时显示。

解决办法是到 fflush stdout每个之后 printf .

printf("\t%d",i);
fflush(stdout);

Why does printf not flush after the call unless a newline is in the format string?想要查询更多的信息

关于c - 循环中的打印功能仅在循环退出后打印所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29154249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com