gpt4 book ai didi

c - 为什么单链表程序没有按照预期的方式工作

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

我写了一个链表程序。当我尝试打印链接列表时,它的打印效果很好。

之后,在打印函数中,我引入了延迟(即 sleep(1)),以便在 1 秒的时间段后打印每个节点的输出。

但实际输出是在完整时间过去后打印的(即所有节点在 10 秒的时间段后打印)。您能否解释一下输出中出现这种意外行为背后的原因是什么?

 <p></p>

void print_list(const Node *local_head)
{
for(const Node *current = local_head; current != NULL; current = current->next) {
printf("%d -> ", current->value);
sleep(1);
}
printf("\n");
printf("**** End of List ****\n");
}

int main()
{
int i;
Node *head = create_node(10);
head = append_node(head, create_node(10));
for(i = 0; i < 10; i++) {
head = append_node(head, create_node(20));
head = prepend_node(head, create_node(30));
}

print_list(head);

return 0;
}

最佳答案

stdout 的输出(即 printf 写入的 FILE *)是缓冲的。更具体地说是行缓冲(当连接到终端时)。

这意味着除非刷新缓冲区,否则输出实际上不会写入终端,这在四种情况下发生:FILE * 已关闭、缓冲区已满、有换行符,或者您使用 fflush 显式刷新它功能。

对于您的用例,最好的解决方案是在 sleep 之前在循环中调用fflush:

for(const Node *current = local_head; current != NULL; current = current->next) {
printf("%d -> ", current->value);
fflush(stdout); // Make sure the buffer is flushed and written to the terminal
sleep(1);
}

关于c - 为什么单链表程序没有按照预期的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58438227/

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