2016-11-14 101 views
2

代码的要点是创建由用户设置的二维维度数组。被提示输入宽度和高度后,用户必须将值存入char到2D阵列的每个位置。当使用int :(int mat,int value)实现时,算法工作正常,但是当试图用char(char mat,char值)实现时,输出与整数版本不一致。唯一的变化是数组和值的类型,以及将scanf/printf("%d")设置为scanf/printf("%c)。任何你可以用字符实现这个二维数组的方法?如何用C中的字符填充二维数组?

#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

更改此声明如下方式

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

而且改变这种说法有点像

printf("Enter your character value: "); 

,它将更清楚该计划预计输入什么。

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; 
    } 
} 
+0

或者使用'scanf(“%c”,...)'。但是,当然,这可以防止实际插入任何空白字符,如果这是可取的... – twalberg

+0

'do' /'while'循环是假的。你可以先用'scanf(“%* [\ r \ n]”)忽略挂起的换行符;'然后用'value =''读取char; scanf(“%c”,&value);' – chqrlie