2012-02-13 13 views
3

私はコーディングが新しく、このC#ではループビジネス中に固執しています。私はついに文章をループさせるようにしましたが、今は最初に書かれた文が繰り返されます。たとえば、数字が6で、7を推測すると「あまりにも高い」と表示されますが、6よりも低いかどうかを再度推測すると、「あまりにも高い」と表示されます。 。」C#Do whileループ問題

おかげ

static void Main(string[] args) 
    { 
     Random r = new Random(); 

     int intRandomNum; 

     // ask the random num gen for num between 1 and 12 
     intRandomNum = r.Next(10) + 1; 

     //ask user for their first guess 
     Console.WriteLine("I'm going to generate a random number, can you guess what it is? " + intRandomNum); 

     int intUserNum = int.Parse(Console.ReadLine()); 

     do 
     { 

      if (intUserNum == intRandomNum) 
      { 
       Console.WriteLine("You got it! Great job!"); 
      } 

      if (intUserNum < intRandomNum) 
      { 
       Console.WriteLine("Too low! Try Again."); 
       Console.ReadLine(); 
      } 
      if (intUserNum > intRandomNum) 
      { 
       Console.WriteLine("Too high! Try again."); 
       Console.ReadLine(); 
      } 

     } while (intUserNum != intRandomNum); 

     Console.ReadKey(); 
    } 
} 

}

おかげで助けをみんな!わかった!最後に!

+0

リードが正しい答えを持っていますが、サイドノートとして、あなたはおそらくどちらかを移動する必要がありますループから外れます(正しいときに壊れてリンクにぶつかります)。それで、あなたは同じチェックを2度やりません。ちょっと基本的な最適化 –

答えて

5

ループ内に解析を入れて、intUserNumを再計算する必要があります。書かれたよう

int intUserNum = int.Parse(Console.ReadLine()); 

    do 
    { 

     if (intUserNum == intRandomNum) 
     { 
      Console.WriteLine("You got it! Great job!"); 
     } 

     if (intUserNum < intRandomNum) 
     { 
      Console.WriteLine("Too low! Try Again."); 
      intUserNum = int.Parse(Console.ReadLine()); 
     } 
     if (intUserNum > intRandomNum) 
     { 
      Console.WriteLine("Too high! Try again."); 
      intUserNum = int.Parse(Console.ReadLine()); 
     } 

    } while (intUserNum != intRandomNum); 

あなたのコード、ユーザーから新しい行を読み込み、それが数に変換しますことはありませんので、あなたの変数が変わることはありません。これはあなたの最初の間違った推測が永遠に使用される原因となります。

int.Parseの代わりにint.TryParseを使用することをお勧めします。これは整数ではないユーザーが何か...

+0

ありがとう!それはそれをした! – user1207424

1

は、ループ内で読ん入力を移動した場合、あなたが処理することができます:ある

int intUserNum; 

    do 
    { 
     intUserNum = int.Parse(Console.ReadLine()); 
     if (intUserNum == intRandomNum) 
     { 
      Console.WriteLine("You got it! Great job!"); 
     } 

     if (intUserNum < intRandomNum) 
     { 
      Console.WriteLine("Too low! Try Again."); 
     } 
     if (intUserNum > intRandomNum) 
     { 
      Console.WriteLine("Too high! Try again."); 
     } 

    } while (intUserNum != intRandomNum); 
+1

さらにConsole.ReadLineコールを削除する必要があります。この場合は... –

+0

'if'文の中で' Console.ReadLine(); 'への呼び出しを削除する必要があります。 –

+0

はい、私の間違いです。一定。 – Oleksi

1

ので、実際の数字を取り出すコードintUserNumへのユーザー、すなわち

int intUserNum = int.Parse(Console.ReadLine()); 

外ループなので、一度だけ実行されます。ループが繰り返されるたびに、同じ古い番号がチェックされます。

コーディングのヒント:コンピュータには、にはとする予定がないことを覚えておいてください。あなたの意図は正しいかもしれません。つまり、intUserNumには、ユーザーが推測する次の数字が常に含まれているはずです。しかし、コンピュータはあなたが話したことだけを行い、ユーザーはループの中で数字を1回入力すればいいと言いますが、intUserNumは新しい値を取るべきだとは決して言わないので、古い値を保持します永遠に。

0
int intUserNum = int.Parse(Console.ReadLine()); 

ループの先頭にある必要があります。

C#はわかりませんが、それが必要です。

0

入力をループ内に取り込み、解析する必要があります。ループです。それ以外の場合は値が同じすべての時間まま:「!あなたは右のそれを得た」

// ... 

do 
{ 
    int intUserNum = int.Parse(Console.ReadLine()); 

    if (intUserNum == intRandomNum) 
     Console.WriteLine("You got it! Great job!"); 

    if (intUserNum < intRandomNum) 
    { 
     Console.WriteLine("Too low! Try Again."); 
     Console.ReadLine(); 
    } 
    if (intUserNum > intRandomNum) 
    { 
     Console.WriteLine("Too high! Try again."); 
     Console.ReadLine(); 
    } 

} while (intUserNum != intRandomNum); 
0
static void Main(string[] args) 
{ 
    var rnd = new Random(); 
    var n = rnd.Next(13); 

    while (!Guess(n)) ; 

    Console.ReadKey(); 
} 

static bool Guess(int n) 
{ 
    int input; 

    if (!int.TryParse(Console.ReadLine(), out input)) 
     return false; 

    var msg = input == n ? "Win" : input < n ? "Low" : "High"; 
    Console.WriteLine(msg); 

    return input == n; 
}