2015-05-17 180 views
0

我試圖打印一個字符矩陣使用單一的put而不是嵌套循環,但我總是在打印結束時再多出一個字符。我要打一場乒乓球比賽,我需要儘快更新屏幕。打印沒有for循環的矩陣

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) 
< 
+0

是的,我輸入了錯誤。 mapa實際上是地圖。語言是C. – Uzai

+1

字符串需要以空終止。 – OldProgrammer

回答

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以關閉字符串變得更加容易。如果沒有\0puts()命令不知道何時停止打印。在你的情況下,它只是一個<,但它可能導致打印很多字符!

此外,我不會依賴多維數組在存儲器中線性映射這一事實。

+0

它的工作!謝謝! – Uzai

+0

「我不會依賴這個事實......」:你一般都是對的,但對於一個char-array來說,這是由標準保證的。 'sizeof(char)被定義爲1.注意它並不會違反CHAR_BIT == 8.另外,它可能適合通過換行終止每一行以獲得一個矩形輸出,而不依賴於控制檯的維數。 – Olaf

+0

The尺寸應該是#defines。它們很可能在代碼後面需要,因此需要將它們放在任何地方,明確的名稱可以大大提高可讀性。 – Olaf

0

可以使用fwrite(3)(或write(2),如果你不想要的緩衝,但你可能做,如果你是清除屏幕在同一個寫)。

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

write(1, map, 80*40);