lalit
对于以下输入:
#include<stdio.h>
#define max 3
struct t
{
char ch;
char cH;
int i;
};
int main()
{
struct t test[max];
int count=0,in=0;
while(count < max)
{
printf("Enter small char\n");
scanf("%c",&test[count].ch);
getchar();
printf("Enter big char\n");
scanf("%c",&test[count].cH);
getchar();
printf("Enter number\n");
scanf("%i",&test[count].i);
count++;
}
for(in=0;in<count;in++)
{
printf("%c %c %i\n",test[in].ch,test[in].cH,test[in].i);
//printf("line%10i\n",in);
}
return 0;
}
输出:
a A 1
b B 2
c C 3
为什么不打印第2行和第3行。由于getchar()函数导致错误? 还有更好的冲洗输入吗?
答案 0 :(得分:2)
当你读取一个整数时,scanf会保留&#39; \ n&#39;在您的下一个scanf捕获的缓冲区中(当您按Enter键时)。因此,只需在读取整数后添加一个新的getchar()。
printf("Enter number\n");
scanf("%i",&test[count].i);
count++;
getchar();
答案 1 :(得分:1)
您还可以通过在格式规范中的%c
之前添加空格来解决问题。然后,不需要拨打getchar()
。
while(count < max)
{
printf("Enter small char\n");
scanf(" %c",&test[count].ch);
printf("Enter big char\n");
scanf(" %c",&test[count].cH);
printf("Enter number\n");
scanf(" %i",&test[count].i);
count++;
}