如何用C中的字符填充二维数组?

时间:2016-11-14 22:01:39

标签: c arrays

代码的要点是创建由用户设置的2D维度数组。在提示宽度和高度后,用户必须将char值放入2D阵列中的每个位置。当使用int :( int mat,int value)实现时,算法工作正常,但是当尝试使用char(char mat,char值)实现时,输出与整数版本不一致。唯一的更改是数组和值的类型,以及将scanf/printf("%d")设置为scanf/printf("%c)。你有什么办法可以用chars实现这个2D数组吗?

#include <stdio.h>

int main() {

    int width;
    int height;

    printf("Enter col and row values between 2 and 20.\n");
    scanf("%d %d", &width, &height);
    printf("The numbers you typed was %d %d\n", width, height);

    char mat[height][width];
    int i;
    int j;
    char value;

    for (i = 0; i < height; i++) {
        for (j = 0; j < width; j++) {
            printf("Enter your value.\n");
            scanf("%c", &value);
            mat[i][j] = value;
        }
    }

    for (i = 0; i < height; i++) {
        for (j = 0; j < width; j++) {
            printf("%c", mat[i][j]);
        }
        printf("\n");
    }
    return 0;
}

2 个答案:

答案 0 :(得分:1)

  

...输出与整数版本

不一致

嗯,当然不是。它将是字符而不是整数。否则,它将是相同的。

另外,你的输入循环真的很奇怪。

for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
        printf("Enter your value.\n");
        scanf("%c", &value);
        mat[i][j] = value;
    }
}

看起来你正试图提示每个角色,但是你只读了一个角色。我无法想象你期望有人如何使用它。如果我想输入“A”,我输入“A”,但是在我按下回车之前什么都不会发生。但那将输入两个字符。所以这段代码看起来设计得很差。

作为快速解决方案,您可以尝试以下方式:

for (i = 0; i < height; i++) {
    for (j = 0; j < width; j++) {
        printf("Enter your value.\n");
        do scanf("%c", &value);
            while (value == '\n' || value == '\r');
        mat[i][j] = value;
    }
}

答案 1 :(得分:0)

按以下方式更改此声明

scanf(" %c", &value);
      ^^^^

同样更改此声明,如

printf("Enter your character value: ");

将更清楚程序期望输入的内容。