2016-10-04 15 views
-6

私はこのプログラム "right"を理解できなかったので、誰にでもこのことを説明してください。このプログラムは私のコンパイラでは完全に動作しませんでした。cのネストループとは何ですか?

#include<stdio.h> 

int main(void) 
{ 
    int answer, count, chances, right; 

    for(count=1; count<11; count++){ 
     printf("What is %d + %d?", count,count); 
     scanf("%d", &answer); 

     if(answer == count+count) printf("Right!\n"); 
     else{ 
      printf("Sorry, you'r wrong.\n"); 
      printf("Try again.\n"); 
      right = 0; 

      for(chances=0; chances<3 && !right; chances++){ 
       printf("What is %d + %d?", count, count); 
       scanf("%d", answer); 

       if(answer == count+count){ 
        printf("Right!\n"); 
        right = 1; 
       } 
      } 
      if(!right) 
       printf("The answer is %d.\n", count + count); 
     } 
    } 

    return 0; 
} 
+3

2番目の 'scanf'にはアンパサンドを含める必要があります、' scanf( "%d"、&answer); ' – yano

+1

"このプログラムはコンパイラで完全に実行できませんでした " 。コンパイルエラーが発生した場合は、表示してください。 – kaylum

+0

このプログラム出力1 + 1とは何ですか?もし答えが偽であれば、3つのチャンスが与えられます。しかし、else部分では、right = 0.を代入します。これはfalseを意味するbooleanという言葉です。ループ条件は<3 &&!rightのチャンスです。これは正しいことが真でなければならないことを意味します。正しいことが真になることができます。条件の右辺が1(真)ならば他人は答えが右でなければif私は理解しています。しかし、私は条件付き部分を理解できませんでした。コメントありがとうございました。 –

答えて

0

その1から10

に同じ数字の合計をユーザに求めている簡単な数学の和クイズは、予想される出力は次のようになります。 1 + 1は? 外部ループのすべての反復で、このような質問の後、プログラムはユーザーの入力を待ちます。ユーザーが数値を入力すると、入力値との合計をチェックします。合計が正しければ、ユーザは答えが正しいことを知らされる。そして、同じことが2回繰り返されます。すなわち、 2 + 2とは何ですか? ユーザ入力が正しくない場合、ユーザは正解を入力する3つの機会が与えられます。ユーザーが3回連続して間違った答えをした後、実際の答えがユーザーに表示され、外側のループが次の番号に向かって移動します。 ここでブール値に正しい変数が使用されます Ie. 1 =真、0 =偽。 ユーザーが間違って答えると、正しい変数がfalseに設定されます。

+0

else部分でrightは値0を割り当てます。これはrightがfalseであることを意味します。内側のforループでは、条件部分は<3と!rightのチャンスです。それは真実ではなく真実であることを意味します。私たちは権利が偽であるため、真実になることができます。その後、私たちは右= 1を割り当てます。それは真実を意味します。答えが正しい場合はその部分が分かります。最後に、答えが真でない場合は本当の答えです。しかし、私は条件付きの右部分を理解できませんでした。あなたのコメントのために。 –

+0

基本的に、正しい変数はループ内の反転ブール条件として使用されます。右に0を割り当てることは、右が偽であることを意味する。条件!rightは、権利が偽のままである場合にのみループが反復することを保証します。つまり、あるループ反復で右が1(真)に変化すると、ループ条件はループを直ちに破る偽の値とANDされ、次の反復(チャンス)は返されません。 –

+0

あなたのコメントをありがとうございます。あなたのほとんどは私のクエリを90%クリアします。私は私たちがright = 0.thatを割り当てる問題を抱えています。しかし、2番目のforループ条件部分にはrightは論理的にfalseではありません。偽(真)。私たちは右= 0(偽)を割り当てているので、どうすれば偽が残っているかもしれません。あなたの時間に感謝します。 –

関連する問題