2016-06-20 62 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