我正在尝试从用户那里获取二维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
有什么问题?
答案 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;
}