c-in while循环扫描第二次被跳过



我是编程新手。我的代码有问题。在第一次运行中它运行良好,但在第二次运行中,它跳过scanf并退出循环,而调试器显示ch仍然是y,并且调试器显示的另一件事是,在第二个迭代中它没有到达scanf。即使扫描被跳过,为什么控制会脱离循环,因为ch的值并没有改变。请帮帮我。

    #include<stdio.h>
    int main()
    {
        char ch=y;
        while(ch==y || ch==Y)
        {
        printf("Its hello again to checkn");
        printf("Do you wish to continue: y or nn");
        scanf("%c", &ch);
    }
    exit(0);
    }

如果我像下面这样再次修改此代码#包括

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

即使我使用fflush,它也会跳过最后一次打印。

每当您在输入后按enter键时,这都会被正在接受字符的扫描所消耗(因为按enter键也会导致字符)

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

scanf(" %c", &ch);

或者,在scanf() 之后放一个getchar()

清洁:

 #include<stdio.h>
    int main()
    {
        char ch='y';
        do {
        printf("Its hello again to checkn");
        printf("Do you wish to continue: y or nn");
        scanf(" %c", &ch);
        }while(ch=='y' || ch=='Y');
    }

最新更新