我在输入c中的字符类型时遇到了麻烦。我的源代码行为很不寻常。
我的代码是:
int n,i;
char *ps;
printf("Total no:");
scanf("%d",&n);
ps=(char *)calloc(n,sizeof(char));
for(i=0;i<n;i++) {
printf("Enter character %d:",i+1);
scanf("%c",ps+i);
}
然后根据我的要求,它应该为所有不接受输入。 n的但它不能很好地工作,当循环第一次运行然后接受输入时它不会接受任何输入 当循环运行2次,然后运行4次,依此类推。
所以请告诉我我的代码有什么错误?
- 提前谢谢。
答案 0 :(得分:4)
循环内对scanf
的每次调用都会读取下一个字符。如果输入,例如:
Total no:
4 输入
然后第一个scanf
会将4
读作int
,但 Enter 将会被下一个scanf
看到( loop)作为换行符\n
。
将第一个调用更改为scanf("%d\n", &n)
,将循环内的调用更改为scanf("%c\n",ps+i)
。
答案 1 :(得分:1)
您的scanf调用不包含换行符,因此当您输入“5 [enter]”作为输入时,第一个scanf读入“5”,第二个扫描读取换行符。尝试将您的scanf调用更改为scanf("%d\n", &n)
或scanf("%d%*c", &n)
,以明确处理换行符。