如何在二维数组中的某个位置显示一个字符?

时间:2017-01-14 19:27:32

标签: c

我想清楚,是的这是一个与家庭作业相关的问题,不,我不指望你为我做功课。我喜欢编码,我只是在寻求建议。

话虽如此,我在C中创造了生命游戏。这里有一些代码表明我一直在努力:

void create_area(void){
int table[24][80];
int i,j;
int xvalue=10,yvalue=10;
table[10][10] = 2;


/*for(j=0; j<24; j++){
    for(i=0; i<80; i++){
        table[j][i] = 1;
    }
}*/

for(j=0; j<24; j++){
    for(i=0; i<80; i++){
        printf(" ",table[j][i]);
    }
    printf("\n");
}

/*if(xvalue=10){
    if(yvalue=10){
        printf("O", table[xvalue][yvalue]);
    }
}*/

/*for(j=0; j<24; j++){
    for(i=0; i<80; i++){
        if(xvalue=0){
            if(yvalue=0){
                printf("O",table[xvalue][yvalue]);
            }
        }
    }
}*/
}

我的主要方法没有在这里显示,但是它负责查找参数和参数字符串的数量,并将它们放入我使用的两个数组(x_array和y_array)的坐标中。上面显示的方法基本上是在终端中创建网格。 create_area的参数现在是无效的(因为我只想测试值以查看它是否有效,这就是为什么我有两个int变量:xvalue和yvalue)。但想法是create_area将采用x值和y值并初始化单元格将开始的字符“O”。很多代码都被注释掉了,因为我正在努力解决问题。

我的问题:如何在我的二维数组中插入一个字符,以便在终端中查看时在网格上的某个位置显示该字符?

到目前为止,我创建了我的2d数组,并使用了两个for循环来遍历它并打印空格。但我正试图弄清楚如何在表[10] [10]中打印一个字符。我尝试了一些东西,但角色不会显示在特定位置,只显示在屏幕的左下角。我想我错过了一些简单的事情。

任何帮助都将不胜感激。

5 个答案:

答案 0 :(得分:4)

如果要表示字符网格,则应使用数据类型char而不是int和字符常量(例如'1')而不是整数常量(例如{{ 1}})。但是,主要问题是语句1总是打印一个空格,因为您错过了格式字符串中的格式说明符(例如,printf(" ",table[j][i]);表示整数,或"%d"表示字符数据类型)。 我不知道你的网格究竟是什么样子,但是下面的片段可能会有所帮助:

"%c"

答案 1 :(得分:4)

我同意这里的其他答案,但让我提供另一个观点。

您应该将数据演示文稿分开。这里的数组是你的数据(也可能是bool table[24][80],因为在生命游戏中,每个单元格由1位描述)。显示数据的代码应检查每个数据元素(查看它是0还是1)和输出1 char。为此,您可以使用putchar

putchar(table[j][i] ? 'x' : ' ')

printf

printf("%c", table[j][i] ? 'x' : ' ')

将数据与演示文稿分开是很好的,因为这样可以更轻松地分别更改(改进)每个数据。例如,如果您决定在可视化中将x替换为*,则相应的代码位于一个位置。如果您决定通过为每个单元分配1个字节来优化存储(而不是每个单元1 int) - 更改也相对本地化。

答案 2 :(得分:2)

供选择。您实际上可以用空格填充table,修改它然后打印

char table[24][80]; // char is better

memset(table, ' ', sizeof(table[0][0]) * 24 * 80); // Fill table with spaces

table[10][10] = 'J'; // Your first custom char
table[20][20] = '0'; // Another custom char

for(j=0; j<24; ++j) {
    for(i=0; i<80; ++i) {
        printf("%c",table[j][i]); // You forget write "%c" to print char
        //putchar(table[j][i]) // This will also work
    }
    printf("\n");
}

答案 3 :(得分:1)

请参阅printf的此说明。在C中,char acter只是一个整数,所以你应该指定一个格式来输出它,就像一个字符%c或整数(十进制)%d

   for(j=0; j<24; j++) {

        for(i=0; i<80; i++){

            if (table[j][i] == 1) { // it's a code of some character that fills your array (As I saw in commented block you used 1)
                printf(" ");
            } else {
                printf("%c",table[j][i]);
            }
        }

        printf("\n");
    }

P.S。对于profi,我知道这不是最佳代码,但他很容易理解。

答案 4 :(得分:1)

您可以使用%hhu扫描代码打印unsigned char。这意味着无需更改int table数据类型。

printf("%hhu", table[j][i]); % table[j][i] contains integers

提示:unsigned char范围为0 - 255,未放置在此范围内的数字将不会显示为您所期望的范围。