2016-11-14 12 views
2

コードのポイントは、ユーザーが設定した寸法の2次元配列を作成することです。幅と高さの入力が求められたら、ユーザーはcharの値を2D配列の各位置に配置する必要があります。 int:(int mat、int value)で実装した場合、アルゴリズムは正常に動作しますが、char(char mat、char value)で実装しようとすると、出力は整数バージョンと一致しません。唯一の変更は、配列と値の型とscanf/printf("%d")scanf/printf("%c)に設定することです。任意の方法で、この2D配列をcharで実装できますか?Cで2次元配列にcharを埋め込む方法は?

#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; 
    } 
} 

各文字の入力を求めているようですが、その後は1文字しか読み込めないようです。私はあなたが誰にどのようにそれを使うことを期待しているのか想像できません。私が "A"を入れたいのであれば、 "A"とタイプしますが、enterを押すまで何も起こりません。しかし、それは2文字を入力します。だから、このコードはやや貧弱に設計されているようだ。クイックフィックスとして

、あなたのような何かを試みることができる。また、それこと

printf("Enter your character value: "); 

のようなこの文の何かを変更するには、次の方法

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

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 = ''で文字を読み取ることができます。 scanf( "%c"、&value); ' – chqrlie

関連する問題