-2

ユーザーから 2 次元の char データを取得しようとしていますが、ユーザーからの入力を適切に取得していません。次のコードのバグを強調していただけますか?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
int i, j, k;
char **ch;

printf("\nEnter k : ");
scanf("%d",&k);

ch = (char **) malloc (sizeof(char*) * k );
if(ch == NULL) { printf("\n Not enough memory for ch array "); exit(0);}
for(i = 0; i < k; i++)  {
    ch[i] = (char *) malloc (sizeof(char) * k );
    if(ch[i] == NULL) { printf("\n Not enough memory for ch array "); exit(0);}
}

printf("\nenter char matrix ( %d X %d )\n", k,k);
for(i = 0; i < k; i++) {
    for(j = 0; j < k; j++) {
        scanf("%c", (*(ch + i) + j) );
    }
}

printf("\n char matrix : \n");
for(i = 0; i < k; i++) {
    for(j = 0; j < k; j++) {
        printf("%c ",*(*(ch + i) + j));
    }
    printf("\n");
}

for(i = 0; i < k; i++)  free(*(ch + i));
free(ch);   
return 0;
}

で置き換えてみましcharint。整数に対してはうまく機能します。

charからの読み取りの何が問題になっていstdinますか?

4

2 に答える 2

0

問題:

scanf("%c", (*(ch + i) + j) );

入力バッファにscanf("%d",&k);まだ改行があると、それがchar行列の最初のエントリになります。行列を埋めるときにさらに改行を入力すると、それらも行列のエントリになります。

行列を埋める前に、入力バッファーをクリアします。

int c;
do {
    c = getchar();
}while(c != '\n' && c != EOF);
if (c == EOF) {
    // input stream broken, yell
}
于 2012-10-28T20:06:47.787 に答える
0

scanf() に慣れるまで、この小さなプログラムを試してみてください。getchar() と改行について学びます。

#include <stdio.h>

int main(int argc, char **argv) {
    char a,b,c;
    scanf("%c", &a);
    scanf("%c", &b);
    scanf("%c", &c);
    printf("a='%c', b='%c', c='%c'\n", a, b, c);
    return 0;
}
于 2012-10-28T22:52:17.613 に答える