C-此2维字符阵列的char输入有什么问题?为什么它不花总共k*k输入



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

我尝试用int替换char。它确实适合整数。

charstdin读取有什么问题?

问题:

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
}

尝试这个小程序,直到您对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;
}

最新更新