0

我正在尝试使用单个 puts 而不是嵌套循环来打印 char 矩阵,但我总是在打印结束时再得到一个字符。我要做一个乒乓球游戏,我需要尽快更新屏幕。

void main()
{
    int x, y;
    char map[40][80];

    for(y=0; y<40; y++)
    {
        for(x=0; x<80; x++)
        {
            map[y][x]='o';    //Just for testing.
        }
    }
    puts(map);
}

使用此代码打印的最后两行是:

ooooooooooooo...o (80 'o's)
<
4

2 回答 2

0

您可以使用fwrite(3)(或者write(2)如果您不想要缓冲,但如果您在同一次写入中清除屏幕,您可能会这样做)。

fwrite(map, 80, 40, stdout); // or any two numbers whose product is 80*40

或者

write(1, map, 80*40);
于 2015-05-17T15:27:22.657 回答
0
#include <stdio.h>

int main(int argc, char **argv)
{
    int x, y;
    char map[40*80+1];

    for(y=0; y<40; y++) {
        for(x=0; x<80; x++) {
            map[y*80+x]='o';
        }
    }
    map[40*80] = '\0';
    puts(map);

    return 0;
}

我已将地图更改为线性数组。这样更容易\0在末尾添加 a 来关闭字符串。没有\0,该puts()命令不知道何时停止打印。在您的情况下,它只是 a <,但可能会导致打印很多字符!

此外,我不会依赖多维数组在内存中线性映射的事实。

于 2015-05-17T15:32:30.897 回答