-2

我正在尝试从用户那里获取二维字符数据,但它没有正确地从用户那里获取输入。您能否突出显示以下代码中的错误?

#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 回答