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

时间:2016-03-24 09:17:17

标签: c arrays char output

所以大家好,我正在开发一个程序,我需要输出一个2D int数组(我把它变成了int - 数组,因为我在其他一些数据库中处理这些值点)。在我的第一次尝试中,我尝试为int值打印正确的char(包括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");
   }
}

问题是,屏幕闪烁,因为我必须非常快地打印该字段并且它会在字符后打印字符。所以我开始研究(herehere可能有所帮助),并试图通过一次打印出来来解决这个问题(使用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 ++我不会得到任何错误,但输出完全不是应该的。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

试试这个:

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] = '\0';
    printf("%s\n",toPrint);
}

答案 1 :(得分:1)

抱歉,您的代码中有许多错误的内容,因此我必须将其重写为:

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 = '\0';
   puts(toPrint);
}

修改:修正了错误的字符