2017-06-03 99 views
0

我正在學習使用C#編寫代碼的過程。我一直無法弄清爲什麼我的循環不會在我的Hangman程序中輸入10次後結束,儘管如果設置爲6等較小的數字,程序就可以工作。我使用do while循環,並在設置到10歲時,我一直得到似乎是無限循環的東西,因爲它只是不斷重複,並沒有像預期的那樣結束。我沒有編譯錯誤。這是一項任務。任何幫助表示讚賞。這裏是代碼,我寫道:C#DO While循環 - Hangman

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace hangman_projectW4 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      //variable list 
      char letter0 = 'k'; 
      char letter1 = 'i'; 
      char letter2 = 'd'; 
      char letter3 = 'd'; 
      char letter4 = 'e'; 
      char letter5 = 'r'; 
      char letter; 
      int score = 0; 
      string user = ""; 

      //inputs inputs 
      Console.ForegroundColor = ConsoleColor.Green; 
      user = Console.ReadLine(); 
      Console.WriteLine("Hi! Welcome to Hangman."); 
      Console.WriteLine(); 
      Console.WriteLine(); 
      Console.WriteLine(); 
      Console.WriteLine(); 
      Console.WriteLine("Player, please enter a letter at prompt."); 
      Console.Write("_________________________________________________________________"); 
      user = Console.ReadLine(); 
      Console.ForegroundColor = ConsoleColor.Green; 

      do 
      { 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!");     

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!");    

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 

      user = Console.ReadLine(); 
      Console.WriteLine("Please enter a letter: "); 
      letter = char.Parse(Console.ReadLine()); 

      user = Console.ReadLine(); 
      if (letter == letter0 || letter == letter1 || letter == letter2 || letter == letter3 || letter == letter4 || letter == letter5) 
      { 
       Console.WriteLine("You guessed correctly!"); 

      } 
      else 
      { 
       Console.WriteLine("Incorrect. Try Again."); 
       score++; 
      } 
      }while (score <= 10); 

      //outputs 
      user = Console.ReadLine(); 
      user = Console.ReadLine(); 
      Console.Write("_________________________________________________________________"); 
      user = Console.ReadLine(); 
      Console.Write("Guessed Incorrectly: " + score); 
      Console.ReadLine(); 
      Console.ReadLine(); 
      Console.Write("Thank you for playing Hangman."); 
      Console.ReadLine(); 
     } 
    } 
} 

另外,如果是寫代碼更好的辦法讓我不重複了,如果別人十倍...指針將是巨大的!謝謝。

+1

歡迎來到Stackoverflow。不要只把你所有的代碼放在這裏。請閱讀:https://stackoverflow.com/help/mcve,並向我們提供一個最小,完整且可驗證的代碼示例。 –

+2

這是在調試器中執行代碼的好機會。記住循環條件正在檢查的是循環如你所期望的那樣修改該值?如果你有一個無限循環,那麼看起來'score'總是'<= 10'。調試並找出它未按照您期望的方式進行修改的原因。 – David

回答

0

如果您足夠努力,它會結束。一旦你達到了11分或更高的分數,你的代碼可能會繼續,並繼續詢問另一次嘗試。停止複製代碼。更聰明並儘量減少你的代碼!你的循環一遍又一遍地重複同樣的事情,甚至沒有檢查你是否已經達到10點以上(score)。

縮短您的循環,這樣的事情:

do 
{ 
    Console.WriteLine("Please enter a letter: "); 
    letter = char.Parse(Console.ReadLine()); 

    if (letter == letter0 || 
     letter == letter1 || 
     letter == letter2 || 
     letter == letter3 || 
     letter == letter4 || 
     letter == letter5) 
    { 
     Console.WriteLine("You guessed correctly!"); 
    } 
    else 
    { 
     Console.WriteLine("Incorrect. Try Again."); 
     score++; 
    } 
} while (score <= 10); 

下一步是添加所有字母的集合或列表,並縮短if聲明。 ;-)

+0

擊中10次X和我會贏得比賽; o) –

+0

謝謝QC。雖然這不是我評分++的目的嗎?跟蹤不正確提示的嘗試次數?還是隻是重複,因爲我在複製過程中複製了我的次數。我試圖理解邏輯... –

+0

你的整個循環在許多方面都是錯誤的:重複的代碼,所有時間分配的用戶變量,不正確的得分等。也許最好讀一個hang子手的例子,學習它是如何工作的,然後寫你自己的。示例:https://code.msdn.microsoft.com/windowsdesktop/HangMan-C-version-e0d17f1b –