C中的印刷不完整

时间:2015-05-04 20:10:34

标签: c structure

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()函数导致错误? 还有更好的冲洗输入吗?

2 个答案:

答案 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++;
}