我正在尝试从用户那里获取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
。它确实适合整数。
char
从stdin
读取有什么问题?
问题:
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;
}