2010-09-22 131 views
1

我是C#的新手。我在控制台应用程序中有一个“菜单”。现在,当我完成从菜单中选取项目并执行该菜单项目所需的操作时,我想再次循环显示菜单,以便用户可以选择不同的菜单项目。我在菜单上有一个退出,我只想使用它退出。我试过一段时间循环,但这不起作用。它在菜单项被选中并且所选项目代码已经运行之后关闭应用程序。我究竟做错了什么?循环切换语句

static void Main() 
    { 
     int input = 0; 
     while (true) 
     { 

      Console.WriteLine("MENU"); 
      Console.WriteLine("Please enter the number that you want to do:"); 
      Console.WriteLine("1. Do thing A"); 
      Console.WriteLine("2. Do thing B"); 
      Console.WriteLine("3. Do thing C"); 
      Console.WriteLine("4. Do thing D"); 
      Console.WriteLine("5. Do thing E"); 
      Console.WriteLine("6. Do thing F"); 
      Console.WriteLine("7. Exit"); 

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

      switch (menuchoice) 
      { 
       case 1: 
        Console.WriteLine("Thing A has been done"); 
        break; 
       case 2: 
        Console.WriteLine("Thing B has been done"); 
        break; 
       case 3: 
        Console.WriteLine("Thing C has been done"); 
        break; 
       case 4: 
        Console.WriteLine("Thing D has been done"); 
        break; 
       case 5: 
        Console.WriteLine("Thing E has been done"); 
        break; 
       case 6: 
        Console.WriteLine("Thing F has been done"); 
        break; 
       case 7: 
        Environment.Exit; //edit 
        break; 
       default: 
        Console.WriteLine("Sorry, invalid selection"); 
        break; 
      } 

      input++; 
      if (input < 30) 
       continue; 
      else 
       break; 
     }   
    } 

任何人都可以请帮忙吗?提前致谢!

编辑:我知道那个“Console.Exit”不起作用。我只是把它放在那里,以便控制台必须在那里退出。我的问题是,在选择选项并选择了选项代码后,我需要每次循环整个菜单。我只想使用退出退出。但此时菜单不会循环,控制台在选择了1个选项并且选项代码已经运行后关闭。

编辑:当你开始你的程序,你按1然后回车会发生什么?这是真正的问题,菜单似乎没有循环。在我启动我的程序后,按1然后返回代码,情况1运行完美,但随后控制台关闭。如果我再次启动控制台,并且此时按2,则情况2中的代码也可以完美运行,但控制台再次关闭。我已经测试过我所有的情况,并且所有的情况都很完美。

+3

什么问题? (用Environment.Exit()替换Console.Exit) – 2010-09-22 08:25:20

+0

关于你的编辑:对我来说你的示例循环和我所期望的一样。当你开始你的程序('Environment.Exit'替换'Console.Exit')时会发生什么情况,你按1然后按Return?我怀疑你发布的示例与你正在运行的代码有些不同(显然是这样,因为上面的示例没有编译)。 – 2010-09-22 08:45:15

+0

我知道那个“Console.Exit”不起作用。我只是把它放在那里,以便控制台必须在那里退出。我试过Environment.Exit(),但似乎也没有工作。 – CSharpSuzie 2010-09-22 08:46:08

回答

5

保持简单:循环停留在循环,直到7按下

int menuchoice = 0; 
     while (menuchoice != 7) 
     { 

      Console.WriteLine("MENU"); 
      Console.WriteLine("Please enter the number that you want to do:"); 
      Console.WriteLine("1. Do thing A"); 
      Console.WriteLine("2. Do thing B"); 
      Console.WriteLine("3. Do thing C"); 
      Console.WriteLine("4. Do thing D"); 
      Console.WriteLine("5. Do thing E"); 
      Console.WriteLine("6. Do thing F"); 
      Console.WriteLine("7. Exit"); 

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

      switch (menuchoice) 
      { 
       case 1: 
        Console.WriteLine("Thing A has been done"); 
        break; 
       case 2: 
        Console.WriteLine("Thing B has been done"); 
        break; 
       case 3: 
        Console.WriteLine("Thing C has been done"); 
        break; 
       case 4: 
        Console.WriteLine("Thing D has been done"); 
        break; 
       case 5: 
        Console.WriteLine("Thing E has been done"); 
        break; 
       case 6: 
        Console.WriteLine("Thing F has been done"); 
        break; 
       case 7: 
        break; //edit 
       default: 
        Console.WriteLine("Sorry, invalid selection"); 
        break; 
      } 
+0

您的示例不能编译。您将不得不替换'Console.Exit'(这是示例的实际问题)。 – 2010-09-22 08:33:57

+0

菜单不循环,控制台在选择了1个选项并且选项代码已经运行后关闭。每个案例之后的突破陈述都不能解决问题吗? – CSharpSuzie 2010-09-22 08:45:08

+0

@CSharpSuzie:不,break语句应该没问题。 'break'总是留下最内层的循环或switch语句,如[这里]所述(http://msdn.microsoft.com/en-us/library/adbctzc4%28VS.71%29.aspx) – 2010-09-22 08:49:26

4

更换Console.Exit;input = 30;或只使用return;

注意如果用户输入一个字符的行int menuchoice = int.Parse(Console.ReadLine());产生错误。您可以使用int.TryParse ...

0

非常简单的方法是执行以下操作。使用输入计数器作为标志来退出while循环。

case 7: 
    input =30; 
break; 
2

您的代码示例无法编译,因为没有Console.Exit

只需将Console.Exit; break;替换为return;声明,并且您的示例应该按预期工作。

0

这可以在我的机器上正常工作,但在您的逻辑规定的30个命令后停止。

Console.Exit在我的机器上给出了一个复合错误。我以前从未使用Console.Exit

难道你不能用input = 30;来代替它来打破你的循环?