0

ネストされたループの代わりに単一の puts を使用して char マトリックスを印刷しようとしていますが、印刷の最後に常にもう 1 文字取得します。卓球ゲームを作るつもりで、できるだけ早く画面を更新する必要があります。

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);
}

このコードで出力される最後の 2 行は次のとおりです。

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

2 に答える 2

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()コマンドはいつ印刷を停止するかわかりません。あなたの場合、それは単なる でした<が、多くの文字が印刷される可能性がありました!

また、多次元配列がメモリ内で線形にマップされるという事実にも依存しません。

于 2015-05-17T15:32:30.897 に答える
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 に答える