gpt4 book ai didi

c - printf 语句打印前一个 printf 语句

转载 作者:行者123 更新时间:2023-11-30 20:51:13 25 4
gpt4 key购买 nike

我遇到了我见过的最奇怪的错误之一。

我有一个简单的程序,可以打印多个整数数组。

对数组进行排序,然后打印......

  place_in_buf(n100, 100);
insertion(100);
printf("\nThe number of comparisons in insertion sort for n=100 is: %d", insertion_count);
insertion_count = 0;

place_in_buf(n200, 200);
insertion(200);
printf("\nThe number of comparisons in insertion sort for n=200 is: %d", insertion_count);
insertion_count = 0;

程序出现段错误,因为在执行第二个打印语句之前不会打印第一个打印语句。如下调试所示...

   95     */
96 place_in_buf(n100, 100);
97 insertion(100);
-> 98 printf("\nThe number of comparisons in insertion sort for n=100 is: %d", insertion_count);
99 insertion_count = 0;
100
101 place_in_buf(n200, 200);
(lldb) n

Process 1139 stopped
* thread #1: tid = 0x1c96, 0x00000001000017b3 P3`insertion_comparison + 67 at HW8P3.c:99, queue = 'com.apple.main-thread', stop reason = step over
frame #0: 0x00000001000017b3 P3`insertion_comparison + 67 at HW8P3.c:99
96 place_in_buf(n100, 100);
97 insertion(100);
98 printf("\nThe number of comparisons in insertion sort for n=100 is: %d", insertion_count);
-> 99 insertion_count = 0;
100
101 place_in_buf(n200, 200);
102 insertion(200);

...

101 place_in_buf(n200, 200);
102 insertion(200);
-> 103 printf("\nThe number of comparisons in insertion sort for n=200 is: %d", insertion_count);
104 insertion_count = 0;
105
106 place_in_buf(n400, 400);
(lldb) n
The number of comparisons in insertion sort for n=100 is: 4950
Process 1139 stopped
* thread #1: tid = 0x1c96, 0x00000001000017ef P3`insertion_comparison + 127 at HW8P3.c:104, queue = 'com.apple.main-thread', stop reason = step over
frame #0: 0x00000001000017ef P3`insertion_comparison + 127 at HW8P3.c:104
101 place_in_buf(n200, 200);
102 insertion(200);
103 printf("\nThe number of comparisons in insertion sort for n=200 is: %d", insertion_count);
-> 104 insertion_count = 0;

我已经在本地 Mac 和 Linux 服务器上尝试过此操作,两者都在做同样的事情

我也尝试过重置我的 PRAM,但也没有成功。

有什么想法吗?

最佳答案

输出到stdout(由printf使用)默认是行缓冲,这意味着缓冲区被刷新并实际写入换行符。

由于您只打印前导换行符而不是尾随,因此您将获得缓冲区中先前内容到换行符的输出,换行符之后的所有内容都将被缓冲,直到您调用 printf 再次换行。

您应该养成使用尾随换行符的习惯。

关于c - printf 语句打印前一个 printf 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34002627/

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