2017-09-27 86 views
0
int number = 4; 
int guesscount = 0; 
int guess; 

Console.WriteLine("Guess a number between 1 and 10: "); 
guess = Convert.ToInt32(Console.ReadLine()); 

while (guess != number) 
{ 
    guesscount = guesscount + 1; 

    if (guess < number) 
    { 
     Console.WriteLine("Your guess is too low"); 
    } 
    else if (guess > number) 
    { 
     Console.WriteLine("Your guess is too high"); 
    } 
    else 
    { 
     Console.WriteLine("You got it!!"); 
    } 
    Console.WriteLine("Guess again: "); 
    guess = Convert.ToInt32(Console.ReadLine()); 
    Console.ReadLine(); 
} 

當運行代碼的if和else if語句工作,但猜測正確的號碼時,(4),消息「你猜對了」不顯示該窗口剛剛關閉Else語句不工作

+0

看看你的'while'條件...如果他們猜測正確的數字,while循環不執行。 –

+0

您的while循環中還有兩個ReadLine。爲什麼? –

+1

這對於您學習如何使用斷點,單步執行代碼,以便您可以看到發生的事情來說,將是一次極好的機會。 –

回答

1

如果你在圈內,guess不等於number
在操作員看到你的情況。

1

如果輸入正確的數字,則while循環表達式爲false(猜測等於數字),以便不執行代碼塊。這裏是一個有效的解決方案:

public static void Main(string[] args) { 
     int number = 4; 
     int guesscount = 1; 
     int guess; 
     string guessMessage; 

     Console.WriteLine("Guess a number between 1 and 10: "); 
     guess = GetNumber(); 

     while (guess != number) { 

      if (guess < number) { 
       Console.WriteLine("Your guess is too low"); 
      } 
      else if (guess > number) { 
       Console.WriteLine("Your guess is too high"); 
      } 

      Console.WriteLine("Guess again: "); 
      guess = GetNumber(); 
      guesscount++; 
     } 

     if (guesscount == 1) 
      guessMessage = "Well done!!! You got it first time!"; 
     else 
      guessMessage = "You got it!! It took " + guesscount + " guesses."; 

     Console.WriteLine(guessMessage); 
     Console.ReadLine(); 
    } 

    private static int GetNumber() { 
     int number; 

     while (!Int32.TryParse(Console.ReadLine(), out number)) { 
      Console.WriteLine("That was not a number!\nGuess again: "); 
     } 

     return number; 
    } 
+0

爲什麼不使用guessCount ++; ? –

+1

是的,我忽略了這個猜測數,因爲它沒有被使用。儘管使用guesscount將是錯誤的。已更新的代碼正確使用它,並在最後得到一個更好玩的消息:) –

+1

此外,如果輸入非數字字符,Convert.ToInt32將引發異常;已更新代碼來處理此問題。 –

-3

Errrm ..... 請不 「競猜又說:」 工程? 它工作,然後添加控制檯。 Readkey()後

Console.WriteLine("You got it!!"); 
+1

這應該在評論 – Kokombads

+0

在該行之後添加'Console.Readkey()'不會解決問題。最後的'else'塊永遠不會被擊中。 –

0

難道是因爲第一次的猜測之後,如果正確的號碼被輸入,程序進入了循環試圖再次顯示消息之前?

爲什麼不嘗試一個do while循環:

int number = 4; 
int guesscount = 0; 
int guess; 

do { 
    if (guesscount == 0) { 
     Console.WriteLine("Guess a number between 1 and 10: "); 
    } else { 
     Console.WriteLine("Guess again: "); 
    } 
    guesscount = guesscount + 1; 
    guess = Convert.ToInt32(Console.ReadLine()); 
    Console.ReadLine(); 

    if (guess < number) 
    { 
     Console.WriteLine("Your guess is too low"); 
    } 
    else if (guess > number) 
    { 
     Console.WriteLine("Your guess is too high"); 
    } 
    else 
    { 
     Console.WriteLine("You got it!!"); 
    } 
} while (guess != number) 
+0

也埃裏克的答案是正確的,如果你在第一次嘗試時輸入正確的數字while循環的條件評估爲false,忽略整個塊 – angel9215

+0

在你的代碼示例中,當他們猜測正確的數字時,它仍然要求他們再次猜測...? –

+0

是真的,我錯過了那個,我已經修復了代碼,我在do while循環的開始處將if語句中的消息塊 – angel9215

0

首先,你可以把「你說對了」指令外循環,它將運行在猜測等於號(即是你在找什麼)。循環將工作,而你不猜測數字,所以只有大於和小於在這裏評估。這裏是一個工作代碼:

int number = 4; 
    int guesscount = 0; 
    int guess = 0; 

    Console.WriteLine("Guess a number between 1 and 10: ");  
    guess = Convert.ToInt32(Console.ReadLine()); 

    while(number != guess){ 
     if(guess < number) 
      Console.WriteLine("Your guess is too low"); 
     else 
      Console.WriteLine("Your guess is too high"); 

     Console.WriteLine("Guess again: "); 
     guesscount = guesscount + 1; 
     guess = Convert.ToInt32(Console.ReadLine()); 
    } 

    Console.WriteLine("You got it!!!!");