2017-02-18 3 views
0

これは、ユーザーの選択を求めるメニュー駆動型のプログラムです。 条件が実行されないのはなぜですか? 出力が添付されています。 は、ユーザーの入力を求めるプログラムを作成:if条件が実行されないのはなぜですか?

void main() 
{ 
    float a,b,ans=0;char ch,choice; 


    choice='y'; 

    while(choice=='Y'||choice=='y') 
    { 


     printf("Enter two numbers \n"); 
     scanf("%f %f",&a,&b); 
     printf("1.+for Addition\n"); 
     printf("2.-for subtraction \n"); 
     printf("3.*for multiplication \n "); 
     printf("4./for Division \n"); 
     printf("Enter your choice of operation \n"); 
     scanf("%c",&ch); 

     if(ch=='+') 
      ans=a+b; 
     else if (ch=='-') 
      ans=a-b; 
     else if(ch=='*') 
      ans=a*b; 
     else if(ch=='/') 
      ans=a/b; 
     else 
     { 
      printf("wrong choice entered\n"); 
     } 
     printf("Answer is %f \n",ans); 
     printf("Do you want to coninue (Y/N)\n"); 
     scanf("%c",&choice); 
    } 

    printf("program Terminated\n"); 
} 

出力:

/* Enter two numbers 
    1010 
    22 
    1.+for Addition 
    2.-for subtraction 
    3.*for multiplication 
    4./for Division 
    Enter your choice of operation 
    wrong choice entered 
    Answer is 0.000000 
    Do you want to coninue (Y/N) 
    n 
    program Terminated 
*/ 

上記は、出力画面です。 操作を実行しません。

答えて

1

のように宣言されなければならないことを考慮し。しかし、2つの数字を入力した後、Enterを押しました。コンピュータはそれを新しい入力として認識し、入力を必要とする最初の適切な変数に置きます。この場合は、変数chであり、+、 - /または*の代わりに、chは "new line"の値を持ちます。標準出力にchの値を整数として書き込もうとすると、数字10が書き込まれます。これは改行のASCII文字です。最初の2つの数字を入力した後にgetchar()を追加するだけで、その新しい行の記号が収集され、次のscanfが正常に動作します。

ちなみに、前回の操作決定後にEnterキーを押すと、プログラムが正常に動作しなくなるため、前回の入力時に同じ問題が発生していたscanf("%c",&choice);。この部分についても同じことをしてください。あるいは単に%cの前に空白文字を残しておいてください。

1

そうでない場合は次の文字は、その空白文字することができ読まれる以下の

scanf(" %c",&ch); 
     ^^ 

scanf(" %c",&ch); 
     ^^ 

を試してみてください。

はあなたの入力最初の2つの数字は、彼らは、変数aとbの中に置かれたときのパラメータなしのC標準関数mainに応じ

int main(void) 
0

scanf()は後続の改行を消費しません。スキップされたscanf()はユーザが入力した前の行から改行を受け取り、あなたが望むように入力を受け取ることなく終了します...

scanf()は改行で少し面倒です。可能な解決策は、コンソールから行を取得するためにfgets()を使用し、sscanf()を使用して受信した文字列を解析することです。

もう1つ、よりターゲットを絞った解決方法は、最後のscanf()呼び出しの書式文字列に "%c"を使用することです。 %c書式指定子は、独自の空白を消費しないため、ユーザーが入力した文字ではなく、残りの改行を取得します。

関連する問題