c - 在 while 循环中 scanf 第二次被跳过

标签 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);
    }

如果我再次修改此代码,如下所示 #包括

    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 也会被跳过。

最佳答案

每当您在输入后按 Enter 时,都会被接受字符的 scanf 消耗(因为按 Enter 也会生成字符)

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

scanf(" %c", &ch);

或者,在 scanf() 之后放置 getchar()

清理:

 #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');
    }

关于c - 在 while 循环中 scanf 第二次被跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25629256/

相关文章:

c - 如何为发布版本内联一个函数

java - 而循环/java

c++ - 如何存储 while 循环中产生的数据?

delphi - TClientDataSet 遍历并删除记录,因为某些记录在 while 循环中遍历两次(如果有索引)

c++ - 结合使用 FreeGlut 和 SDL

c++ - 真实C/C++代码优秀例子的建议

c - 如何用一个函数获取没有重复值的数组

c - ePoll 不接受一些客户

javascript - 如何使用 do while 循环将字符串多次插入数组?

php - 如何在循环中创建换行符