2016-06-20 23 views
0

我希望此代码要求用户输入一年,然后告诉他们是否为闰年。然后问他们是否想再检查一年。目前,它提出第一个问题并回答问题。Scanf和While Loop不等待用户输入

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

顺便说一句,你检查闰年的方法是错误的。 – sjsam

+0

谢谢sjsam。我意识到这一点,我只是匆匆而过,看到我被它消耗掉了! – rayzor

回答

1

的问题是,用户输入后,他们的一年,按下输入新行字符留在输入缓冲区,以便在接下来的传读“\ n”和退出循环。在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; 
} 
+0

谢谢RatHat。这是完美的!所以,仅仅为了我的理解,是否在循环问题中引发了这个问题?你会说在未来将scanf(如上图)放在空间中会更好吗?欢呼 – rayzor

+0

当用户输入年份1234并按下输入'\ n'时,输入缓冲区中存储的值为1234 \ n,所以下次您打电话给scanf时,它将抓取'\ n'并退出循环。取决于你在做什么,例如scanf(“\ n%c”,&again);或者刷新输入缓冲区也会起作用,只要记住使用scanf并尝试获取字符时的新行char。 – StaticBeagle

+0

明白了。感谢您的解释。 – rayzor

1

当您执行以\ n结尾的printf()时,下一个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);

+0

感谢您提供的信息/反馈Priyesh。 – rayzor

0

貌似代码是正确的,你可以从你的printf语句中删除换行符“\ n”并尝试吗?

printf(“你想检查一年是闰年?y或n”);

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

+0

得到它排序,这是Dhanabalan的问题。不过谢谢。 :) – rayzor