Scanf和While循环不等待用户输入

时间:2016-06-20 02:52:28

标签: c while-loop scanf

我希望此代码要求用户输入一年,然后告诉他们是否是闰年。然后询问他们是否愿意再检查一年。目前,它问第一个问题没问题,并回答了答案。

程序然后打印出下一个问题,但不等待输入并退出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;
}

3 个答案:

答案 0 :(得分:1)

问题是,在用户输入他们的年份并按下输入后,新的行字符被留在输入缓冲区中,所以在下一遍中它会读取&#39; \ n&#39;并退出循环。在while循环中使用scanf(" %c", &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;
}

答案 1 :(得分:1)

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

试试这个

  var songCollectionForWed = SongCollections[dayCollectionMap["Wednesday"]];

或者使用getchar()

您可以在scanf()

之前从缓冲区刷新或删除1个字符

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

答案 2 :(得分:0)

看起来代码是正确的,您可以删除换行字符&#34; \ n&#34;从您的printf语句如下所示并尝试?

printf(&#34;你想检查一年是否是闰年?或者n&#34;);

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