【发布时间】:2021-05-07 22:28:57
【问题描述】:
有什么方法可以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(),但它似乎没有做任何事情。
【问题讨论】:
-
您通过使用未初始化的非静态局部变量
arr的值调用了未定义的行为,这些值是不确定的,因此任何事情都可以发生。 -
同样
shuffle不经声明使用。 -
你可以通过这种方式调用
fflush,但是这样做没有什么意义,它与给定的代码结合起来没有效果(stdout通常是行缓冲的,输出一个@987654330 @ 将刷新它)。你真正想解决什么问题?请尝试描述问题。 -
您的意思是要清除显示吗?
-
我认为上面的代码应该可以工作,尽管 fflush 是多余的,并且由于缺少初始化,数组中的值非常随意。但是,在这种情况下,内存仍然被分配,因此不会发生访问冲突。您没有显示随机播放功能。也许它没有从调用中返回(例如无限循环)并且您错误地怀疑 printf 什么也不输出。