2016-11-23 9 views
0

私はC言語に新しいので、whileループを終了するためにCで1つのフォーラムを見つけましたが、それでもまだ動作しません。ループを終了させるために、私は "予期した;前の休憩"または "int keep_playing = 4"を与えます。これはシンプルなロックペーパーのはさみゲームです。私はちょうどループに取り組んでおり、すぐにロジック部分について心配するつもりです。ここに私のコードです。C言語でのプログラミング、whileループの終了

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() 
{ 
    printf("Welcome to rock paper scissors!\n"); 
    int keep_playing=5; 
    while (keep_playing==5) 
     printf("Press 'y' to play or 'n' to quit: "); 
     char playornot; 
     scanf("%c\n",&playornot); 
     if (playornot=='y') 
      printf("Ok.\n"); 
     else (playornot=='y') 
      int keep_playing=4; 

    return 0; 
} 
+2

あなたの中かっこが足りないと、読んで本当に痛いです。一方、中括弧を使わないループは、あなたがカンマを使用していない限り、ループ宣言の後の最初の文だけを考慮します(COMMAS THOUGHは使用しないでください)。インデントが誤解を招くので、あなたの意図がそのままであるかどうかは分かりません。あなたのプログラムは、あなたが "printf("再生するには 'y'を、終了するには 'n'を押してください: ");"それはループが見ている間の唯一のステートメントだからです。 – Dmitry

+1

[ユーザー入力に基づいてしばらく(1)を終了するにはどうすればよいですか?](http://stackoverflow.com/questions/38913603/how-can-i-ex1-based-on-ユーザ入力) – xenteros

+0

変数の値を変更する代わりにwhileループを終了するには "break"を使うことができます。 –

答えて

1
#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

int main() { 
    printf("Welcome to rock paper scissors!\n"); 
    int keep_playing=5; 
    while (keep_playing==5) { 
     printf("Press 'y' to play or 'n' to quit: "); 
     char playornot; 
     scanf("%c",&playornot); 
     if (playornot=='y') { 
      printf("Ok.\n"); 
     } else if (playornot=='n') { 
      keep_playing=4; 
     } 
    } 
    return 0; 
} 

コードはどのように見えるかです。あなたの場合、繰り返された行はprintf("Press 'y' to play or 'n' to quit: ");だったので、無限ループがありました。これは、中括弧の運が原因です。

次に、冗長intint keep_playing=4に入力しました。これは別の変数を宣言し、このスコープでのみ表示されます。現時点では同じスコープだったので、実際には中括弧がないときにエラーが発生しているはずです。

そして、前に言及しなかった第3のバグがありました。入力した文字がyではない場合は、nであったはずです。それ以外の場合は、別の入力を求めるか、何らかの方法でそれを処理する方法を決定する必要があります。

そして、第4の1つは、char playornotに2文字をスキャンしようとしたことです。 scanfから\nが削除されました。

+0

私は理解していると思っていますが、私はそれが欲しいのと同じように動作していません。ユーザーがyesを押すと、okと表示されます。 –

+0

私は、笑った。それは単に終了する代わりにそこに座ったり、大丈夫です。 –

+0

はい、ありがとうございます。前回と何が違うのですか? –

2

あなたは2つの基本的な問題を抱えて:あなたはあなたが起こっているすべてのコードの周りにカッコ{}にを使用する必要があるコードの行の全体の多くを繰り返す必要が

  • しばらく使用しての繰り返される。
  • int varを書くときと宣言する変数 - コンパイラにどのような変数があり、どのようなものが呼び出されるかをコンパイラに伝えます。後でこの値を変更しても、再宣言は必要ありません。