【问题标题】:in while loop scanf gets skipped second time [duplicate]在while循环中,scanf第二次被跳过[重复]
【发布时间】:2014-10-27 01:33:33
【问题描述】:

嗯,我是编程新手。我的代码有问题。在第一次运行时它工作正常,但在第二次运行时它会跳过 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。

【问题讨论】:

  • 尝试将您的 yY 更改为 'y''Y'
  • 输入缓冲区不会自行清除...这就是问题所在。关于这个问题有足够多的重复问题,在你写出来之前,一个快速的谷歌搜索就会回答这个问题
  • 使用调试器或在scanf("%c", &amp;ch); 之后添加printf("%d\n", ch) 以查看发生了什么。

标签: c while-loop


【解决方案1】:

每当您在输入后按回车键时,这都会被您的 scanf 消耗,它接受一个字符(因为按回车键也会产生字符)

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

【讨论】:

  • 这段代码按照我想要的方式工作,但我愿意知道为什么我会退出循环,即使 scanf 被跳过了。
  • #include int main() { char ch=y; while(ch==y || ch==Y) { printf("再次欢迎检查\n"); printf("你想继续吗:y or n\n"); scanf("%c", &ch); printf("%c \n", ch); } 退出(0);当我使用此代码时,它也可以按我的意愿工作,但在这种情况下,最后一个 printf 函数会被跳过。
  • 我发布的代码有什么问题?
  • 最后一个 printf 没有被跳过,它正在打印一个空格,当你按下回车键时,它存储在 ch 中。
猜你喜欢
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2012-12-10
  • 1970-01-01
  • 1970-01-01
  • 2012-04-01
相关资源
最近更新 更多