2015-05-17 182 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);