【问题标题】:Can i fflush multiline output?我可以刷新多行输出吗?
【发布时间】: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 什么也不输出。

标签: c output flush


【解决方案1】:

你想要的叫做清除显示。你可以做 system("cls"); 在 Windows 上或 system("clear"); 在 Unixy 系统上。

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

【讨论】:

    猜你喜欢
    • 2016-02-22
    • 2012-02-25
    • 2011-06-29
    • 2018-10-01
    • 1970-01-01
    • 2011-03-05
    • 2017-01-31
    • 1970-01-01
    • 2015-03-16
    相关资源
    最近更新 更多