代码的要点是创建由用户设置的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;
}
答案 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: ");
将更清楚程序期望输入的内容。