我已经创建了一个简单的睡眠排序算法:

#include <stdio.h>
#include <time.h>
#include <pthread.h>

#define ARR_SIZE 10

void *sleepSort(void *arg) {
    usleep(1000 * *(int*) arg);
    printf("%d ", *(int*) arg);
    return NULL;
}

int main(void) {
    srand(time(NULL));
    int arr[ARR_SIZE];

    for (int i = 0; i < ARR_SIZE; i++)
        arr[i] = rand() % 100;

    pthread_t thr[ARR_SIZE];

    for (int i = 0; i < ARR_SIZE; i++)
        pthread_create(thr + i, NULL, sleepSort, (void *)(arr + i));

    getchar();

    return 0;
}

但是,当我从Linux控制台运行它时,在输入新字符之前不会打印任何内容.然而,我已经修改了我的程序,在每个打印上添加一个换行符,如果它像预期的那样工作,我不明白为什么.

推荐答案

标准输出是缓冲的,您需要通过以下方式强制刷新缓冲区:

fflush(stdout);

或通过打印LF

printf("\n")

如果您想要查看输出,还可以禁用缓冲:

setvbuf(stdout, NULL, _IONBF, 0);

文档:setvbuf

你在Godbolt上的程序('\n'不能工作,因为它不是终端):https://godbolt.org/z/x4xT1M51e

C++相关问答推荐

理解没有返回语句的递归C函数的行为

C:gcc返回多个错误定义,但msvc—不""'

C/C++中的状态库

如何将已分配的数组(运行时已知的大小)放入 struct 中?

Can函数指针指向C++中具有不同参数连续性的函数

在C++中头文件中声明外部 struct

加密解密工作正常,但返回错误0x80090005

在基本OpenGL纹理四边形中的一个三角形中进行渲染

为什么我可以在GCC的标签后声明变量,但不能声明Clang?

接受任何参数的函数指针是否与接受不同参数的函数兼容

C语言中的数字指针

C程序向服务器发送TCPRST

如何在C中用bool进行文件I/O?

将某些内容添加到链接列表时,列表中的其他项将使用最后添加的项的名称

令人困惑的返回和 scanf 问题相关

为什么<到达*时不会转换为>?

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

UEFI 应用程序中的计时器回调仅在 AMI BIOS 中挂起

C11 嵌套泛型

仅使用其内存地址取消引用 C 中的 struct