在while循环scanf第二次被跳过

时间:2014-09-02 17:42:30

标签: c while-loop

我是编程新手。我的代码有问题。在第一次运行中它工作正常,但在第二次运行时它跳过scanf并且循环出来,而调试器显示ch仍然是y,调试器显示的另一件事是在第二次迭代中它没有到达scanf。即使scanf被跳过,为什么控制来自循环,因为ch的值没有改变。请帮助我。

    #include<stdio.h>

    int main()
    {
        char ch=y;
        while(ch==y || ch==Y)
        {
        printf("Its hello again to check\n");
        printf("Do you wish to continue: y or n\n");
        scanf("%c", &ch);
    }
    exit(0);
    }

如果我再次修改此代码,如下所示         的#include

    int main()
    {
        char ch=y;
        while(ch==y || ch==Y)
        {
                printf("Its hello again to check\n");
                printf("Do you wish to continue: y or n\n");
                scanf("%c", &ch);
                //fflush(stdin);
                printf("Choice entered %d \n", ch);
        }
        exit(0);
    }

即使我使用fflush,它也会跳过最后的printf。

1 个答案:

答案 0 :(得分:1)

每当你在输入后按Enter键,你的scanf就会接受这个,这是接受一个字符(按下输入也会产生字符)

在%c之前添加空格将解决您的问题,例如:

scanf(" %c", &ch);

或者,在getchar()

之后加scanf()

清理:

 #include<stdio.h>

    int main()
    {
        char ch='y';
        do {

        printf("Its hello again to check\n");
        printf("Do you wish to continue: y or n\n");
        scanf(" %c", &ch);
        }while(ch=='y' || ch=='Y');
    }