2016-10-31 6 views
-4

このwhileループに関するCプログラミングで真の偽を説明できる人はいますか?whileループに関するcプログラミングで真または偽

0が偽であり、while (!Done)が真であり、done = 1も真であるとしたら、done = 1はどのようにループを "中断"するか終了するか?

done=0; 
    while(!done) 
    { 
     c=getchar(); 
     switch(c) 
     { 
      case '1': 
      printf("Beverage $8.00\n"); 
      total+= 8; 
      break; 

      case '2': 
      printf("Candy  $3.00\n"); 
      total+= 3; 
      break; 

      case '3': 
      printf("Sandwich $5.00\n"); 
      total+= 5; 
      break; 

      case '4': 
      printf("Hot Dog. $2.00\n"); 
      total+= 2; 
      break; 

      case '5': 
      printf("Popcorn $6.00\n"); 
      total+= 6; 
      break; 

      case '=': 
      printf("Your choices are finished.\n"); 
      printf("The total is:$%.2f\n", total); 
      printf("Please pay the cashier.\n"); 
      done=1; 
      break; 

      default: 
      printf("I don't understand your choice, please try again.\n"); 
     } 
    } 
    return (0); 
} 
+3

を終了ブール値として 'done'は' true'です。したがって、 '!done'は' false'になり、ループは終了します。 –

答えて

0

Welcome to StackOverflow M.B.

whileループ内のループは、すべてのループの前に、trueまたはfalseのいずれかと評価されます。 C言語でプログラミングするときに取得保証の

一つは、のみ0が偽あり、そして他のすべてが真であるということです。つまり、foobarが真、64が真、-1が真、そしてあなたのケースでは1が真であることを意味します。このため

!オペレータ(notシンボル)は、それが0に真である何かを変更し、そして10を変更します。

したがって、どのようなあなたのwhileループが実際にやっていることは言っている:

または「行っていないが、」「行っている間は真実ではありません」
または「行っている間は、偽である」
または「行ってますが0であります"

最後のケースステートメント'='がヒットし、コードdone=1;が実行されると、次に来るときにコードが終了し、whileループの条件をチェックします。

+0

だから!!doneは!0ですが、これは本当ですがdone = 1も当てはまるので、私はまだすべてを理解していません。説明してください。 –

0

あなたは試すことができます

しばらく(やった!= 1)

、現在行わ= 0ので、それは行われたようtrueされることが、あなたが完了したら、1に等しいではないだろう= 1それはfalseを返し、ループを終了します。最初に行わ

+0

これはコードが同じ場合(この場合)、結果的には論理的には同等ではありません。 'while(done == 0)'と言う方がいいでしょう。 – Addison

+1

完了すればもっとシンプルに見える== 0 – bingcheng45

+0

私はこれをコーディングするこの方法に同意しますが、これは私のオリジナルの質問には完全には答えません。なぜdone = 1ターン!whileループでfalseを行ったのですか? –

0

0であるので!行っている!完了時0ウィッヒは、ループ内で、1 ので、その真のですがやった!1に設定されている0で、 `done`がゼロでない場合、ループは

+0

だから、やったとき!0、それは本当ですが、done = 1も真ですので、私はまだすべてのことを理解していません –

関連する問題