这个二维char数组的char输入有什么问题?为什么它没有采取总共K * K输入?

时间:2012-10-28 19:52:18

标签: c char getchar getch

我正在尝试从用户那里获取二维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;
}

我尝试将char替换为int。它对整数有效。

char读取stdin有什么问题?

2 个答案:

答案 0 :(得分: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
}

答案 1 :(得分: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;
}