2016-06-20 9 views
0

このコードでは、1年を入れて、それがうるう年であるかどうかを尋ねるようにします。その後、もう一年を見たいかどうか聞いてみましょう。現時点では、最初の質問をOKにして答えを返します。ScanfとWhileループがユーザー入力を待っていません

プログラムは次の質問を出力しますが、入力を待つことなく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

ありがとうございました。私はそれを知っていた、私はちょうどこれを介して急いでいたと私はそれによって消費された見よ! – 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

ラトハットありがとうございます。それは完璧に動作します!だから私の理解のために、それは問題の原因となっていたループの質問の\ nだったのでしょうか?将来的にscanfにスペースを入れる方が良いでしょうか?歓声 – rayzor

+0

ユーザーが年1234と入力して「\ n」と入力すると、入力バッファに格納されている値は1234です。\ n次にscanfを呼び出すと、 '\ n'を取得してループを終了します。スペースを使用する方が良いかどうかは...あなたが何をしているかによって異なります。たとえばscanf( "\ n%c"、&again);または入力バッファをフラッシュしてもうまくいけば、scanfを使用して文字を取得しようとしたときに改行文字を覚えておいてください。 – StaticBeagle

+0

説明ありがとう。 – rayzor

1

あなたはprintfの()\ nので終わるを行うと、次のscanf()それを取るでしょう。コードが正しいかのようにあなたはscanfの前にバッファから1つの文字をフラッシュするか、削除することができ

この

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関数を使用してみてください)

()

ソースProgram doesn't wait for user input with scanf("%c",&yn);

+0

情報/フィードバックPriyeshありがとう。 – rayzor

0

が見えます次のようなprintf文から行送り文字 "\ n"を取り除いてみることができますか?

printf( "年がうるう年かどうかチェックしますか?yまたはn");

JAVAスキャナクラスでも同様の問題が発生したため、

+0

それはソートされた、それは問題Dhanabalanだった。しかし、ありがとう。 :) – rayzor

関連する問題