一次输出许多字符(包括 ASCII)?

output many chars (including ASCII) at once?

伙计们,我正在开发一个需要输出二维 int 数组的程序(我将其设为 int 数组,因为我在其他一些地方使用这些值点)。在我的第一次尝试中,我尝试为 int 值打印正确的字符(包括 ASCII):

void printField(){                              
    int i,j;
    system("CLS");
    for(i=0; i<52; i++) {
       for(j=0; j<142; j++) {
            if(field[i][j]==0){
                printf(" ");                    
            }
            if(field[i][j]==9){
                printf("%c",219);                       
            }
            if(field[i][j]==2){ 
                printf("%c",219);                   
            }
            if(field[i][j]==1){
                printf(" ");                    
            }
            if(field[i][j]==6){
                printf(" ");                    
            }
            if(field[i][j]==7){
                printf("%c",207);               
       }
       printf("\n");
   }
}

问题是,屏幕在闪烁,因为我必须非常快地打印该字段,并且它会一个字符一个字符地打印出来。所以我开始研究(here and here 可能会有所帮助)并尝试通过一次打印所有内容(使用 strcat())来解决这个问题:

void printField(){                              
    int i,j;
    char toPrint[10000];
    system("CLS");
    for(i=0; i<52; i++) {
       for(j=0; j<142; j++) {
            if(field[i][j]==0){
                strcat(toPrint," ");                    
            }
            if(field[i][j]==9){
                char temp[2];
                temp[0]=char(219);
                strcat(toPrint,temp);               
            }
            if(field[i][j]==2){
                char temp[2];
                temp[0]=char(219);
                strcat(toPrint,temp);               
            }
            if(field[i][j]==1){
                strcat(toPrint," ");                    
            }
            if(field[i][j]==6){
                strcat(toPrint," ");                    
            }
            if(field[i][j]==7){
                char temp[2];
                temp[0]=char(207);
                strcat(toPrint,temp);               
            }
       }
       strcat(toPrint,"\n");
   }
   printf("%s\n", toPrint);
}

使用 DEV-C++ 我没有得到任何错误,但输出完全不是它应该的。有什么想法吗?

试试这个:

void printField()
{
    int i,j;
    int n = 0;
    char toPrint[52*(142+1)+1];

    system("CLS");

    for (i=0; i<52; i++)
    {
        for (j=0; j<142; j++)
        {
            switch (field[i][j])
            {
                case 0: toPrint[n++] = ' '; break;
                case 9: toPrint[n++] = 219; break;
                case 2: toPrint[n++] = 219; break;
                case 1: toPrint[n++] = ' '; break;
                case 6: toPrint[n++] = ' '; break;
                case 7: toPrint[n++] = 207; break;
            }
        }
        toPrint[n++] = '\n';
    }

    toPrint[n] = '[=10=]';
    printf("%s\n",toPrint);
}

抱歉,您的代码中有很多错误,所以我不得不将其重写为:

void printField(){                              
    int i,j;
    char toPrint[10000];
    char* current = toPrint; // pointer to beginning of char array
    system("CLS");
    for(i=0; i<52; i++) {
       for(j=0; j<142; j++) {
            if(field[i][j]==0){
                *current++ = ' ';
            }
            if(field[i][j]==9){
                *current++ = '\xDB';
            }
            if(field[i][j]==2){
                *current++ = '\xDB';
            }
            if(field[i][j]==1){
                *current++ = ' ';
            }
            if(field[i][j]==6){
                *current++ = ' ';
            }
            if(field[i][j]==7){
                *current++ = '\xCF';
            }
       }
       *current++ = '\n';
   }
   *current = '[=10=]';
   puts(toPrint);
}

编辑: 修复了错误的字符