2017-06-03 100 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 –