【问题标题】:Scanf and While Loop not waiting for user input [duplicate]Scanf和While循环不等待用户输入[重复]
【发布时间】:2016-06-20 02:52:28
【问题描述】:

我希望这段代码让用户输入一年,然后告诉他们是否是闰年。然后问他们是否愿意再检查一年。目前,它会问第一个问题并返回答案。

然后程序打印出下一个问题,但不等待输入并退出 while 循环。我已经在其他帖子上寻找解决方案,并认为我可能拥有它,但它一直在做同样的事情。任何人都可以帮助编写应该是一个程序来编写并打发一些现在已经成为头痛的时间吗?我写过很多更复杂的程序,而这个让我很沮丧。我希望我已经清楚了。非常感激!

//Check if the year is a leap year
#include <stdio.h>

#define YES 1
#define NO 0

void leapyear()
{
    int year;
    printf("Enter a year: \n");
    scanf("%i", &year);
    int x = year % 4;
    int answer;
    if (x == 0)
    {
        answer = YES;
    }
    else
    {
        answer = NO;
    }
    if (answer == YES)
    {
        printf("The year %i is a leap year.\n", year);          
    }
    else
        printf("The year %i is not a leap year.\n", year);
}

int main (void)
{
    char again;
    printf("Would you like to check if a year is a leap year? y or n\n");
    scanf("%c", &again);
    while(again == 'y')
    {
        leapyear();
        printf("Would you like to check if a year is a leap year? y or   n\n");
        scanf("%c", &again);
    }
    return 0;
}

【问题讨论】:

  • 对了,你的闰年查法不对。
  • 感谢 sjsam。我意识到了这一点,我只是匆匆忙忙地冲过去,然后看我被它吞噬了!

标签: c while-loop scanf


【解决方案1】:

问题是在用户输入他们的年份并按下 enter 后,换行符留在输入缓冲区中,因此在下一次传递中它读取 '\n' 并退出循环。在 while 循环中使用 scanf(" %c", &amp;again);

int main (void)
{
    char again;
    printf("Would you like to check if a year is a leap year? y or n\n");
    scanf("%c", &again);
    while (again == 'y')
    {
        leapyear();
        printf("Would you like to check if a year is a leap year? y or   n\n");
        scanf(" %c", &again);
    }
    return 0;
}

【讨论】:

  • 感谢 RatHat。这很完美!所以只是为了我的理解,是不是导致问题的循环中问题的 \n ?你会说将来在scanf(如上)中放置一个空格会更好吗?干杯
  • 当用户输入年份说 1234 并按下 enter '\n' 时,输入缓冲区中存储的值是 1234\n 所以下次你调用 scanf 时它会抓取 '\n' 并退出循环。使用空格会更好还是不使用...取决于您在做什么,例如 scanf("\n%c", &again);或刷新输入缓冲区也可以,只需记住在使用 scanf 并尝试获取字符时换行 char。
  • 知道了。谢谢你的解释。
  • 请记住,当您使用 scanf 查找字符时,每当您询问年份时,都会发生这种情况 scanf("%i", &year);它就像一个冠军。
  • 只有优秀的字符,注意! :-)
【解决方案2】:

当你执行 printf() 以 \n 结尾时,下一个 scanf() 将接受它。

试试这个

scanf(" %c", &again)
       ^ a space here

scanf("\n%c", &again)

Or remove \n from printf because you might not want cursor to go to next line

或者使用getchar()

您可以在 scanf() 之前从缓冲区中刷新或删除 1 个字符

来源Program doesn't wait for user input with scanf("%c",&yn);

【讨论】:

  • 感谢 Priyesh 的信息/反馈。
【解决方案3】:

看起来代码是正确的,你能像下面这样从你的 printf 语句中删除换行符“\n”并尝试吗?

printf("你想检查一年是闰年吗?y还是n");

因为我在 JAVA Scanner 类中遇到过类似的问题。

【讨论】:

  • 搞定了,这就是 Dhanabalan 的问题。不过谢谢。 :)
猜你喜欢
  • 2016-07-22
  • 1970-01-01
  • 2016-07-19
  • 1970-01-01
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 1970-01-01
相关资源
最近更新 更多