我可以刷新多行输出吗?

Can i fflush multiline output?

有什么方法可以 fflush() 多行输出吗?例如,如果我想在 5 行中打印一个 5x5 数组并每 1 秒将其洗牌多次,我应该如何使用 fflush()?

#include <stdio.h>
#include <stdlib.h>
int main(){
    int arr[5][5]; //Just an array of numbers
    for(int k = 0; k < 10; k++){
        for(int i = 0; i < 5; i++){
            for(int j = 0; j < 5; j++){
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
        fflush(stdout);
        shuffle(arr);
        sleep(1);
    }
    return 0;
}

这是我希望输出改变的方式(当然不创建任何额外的新行):

 0 1 2 3 4       5 3 12 7 8
 6 7 8 9 10  ->  1 2 0 13 6
     .               .
     .               .
     .               .

rewind(stdout)fsetpos() 我都试过了,但似乎什么都没做。

你要的就是清屏。你可以做 system("cls"); 在 Windows 或 system("clear"); 在 Unixy 系统上。

或者有 https://en.wikipedia.org/wiki/ANSI_escape_code - 如果你打印那些特殊字符,就会发生一些事情,你可以将光标移到顶部并覆盖文本或尝试清除屏幕。 我不确定哪个转义码适合你,实验一下。