2015-04-17 28 views
0

什么是错我的do while循环的逻辑?做而当条件为真不循环回路

我想阻止用户进一步继续到应用程序,除非他们提供正确的输入。

目前,它只能接受一个输入错误崩溃并产生这个异常之前:

的System.Exception: 在disabler.Program.readInput(字符串输入) 在disabler.Program.detectInput(串输入) 在disabler.Program.Main(字串[] args)

这是我的代码:

private static string detectInput(string Input) 
    { 
     string result= Input; 
     do 
     { 
      //pass input to readInput method 
      if ((result == "exit") || (result == "query") || (result == "disable")) 
      { 
       readInput(result); 
      } 
      else 
      { 
       Console.WriteLine("invalid input detected. Please try again."); 
       result= Console.ReadLine(); 
       readInput(result); 
      } 
     } 
     while (!((result == "exit") || (result == "query") || (result == "disable"))); 
     return result; 
    } 

下面是readInput方法的代码:

//Read user input 
    private static string readInput(string Input) 
    { 
     int successfullyDisabled = 0; 
     string input = string.Empty; 
     switch (Input) 
     { 
      case "disable": 
          int disableCounter = 0; 
       invalidAccount.ForEach(delegate(String samAccountName) 
       { 
        disableCounter++; 
        Console.Write(disableCounter); 
        //disable inactive accounts 
        if (DisableADUser(samAccountName)) 
        { 
         successfullyDisabled++; 
        } 
       }); 

       invalidAccount.Clear();      
       validAccount.Clear(); 
       Console.WriteLine("Press [ENTER] to continue or [ESC] to exit.\n"); 
       break; 
      case "query":     
          Console.WriteLine("No.\t | Dep | User Account\t  | Status");        
          int countRow = 0; 
       validAccount.ForEach(delegate(String samAccountName) 
       { 
        countRow++; 
        Console.Write(countRow); 
        //find status of active accounts 
        findUserStatus(samAccountName); 
       }); 
       validAccount.Clear(); 
       invalidAccount.Clear(); 
       Console.WriteLine("Press [ENTER] to continue or [ESC] to exit.\n"); 
       break; 
      case "exit": 
       //leave console 
       Environment.Exit(2); 
       invalidAccount.Clear(); 
       validAccount.Clear(); 
       break; 
      default: 
       throw new Exception("Invalid command entered. Please enter command again."); 
     } 
     return input; 
    }//end of ReadInput 
+1

什么是异常消息? readInput有什么作用? –

+2

异常显示它正在被'readInput'方法抛出。为了帮助任何可能有兴趣回答这个问题的人,你会如此友好,以便包含它的代码。 – Alex

+4

你是否真的想检查'exit'两次? – paxdiablo

回答

3

你所得到的例外是,你扔在readInput

switch语句从detectInput

的else删除readInput(result);异常基于注释更新:

private static string detectInput(string Input) 
{ 
    string result= Input; 
    while (!((result == "exit") || (result == "query") || (result == "disable"))); 
    {    
      Console.WriteLine("invalid input detected. Please try again."); 
      result= Console.ReadLine(); 
     } 
    } 

    result = readInput(result); 

    return result; 
} 
+0

请你编辑你的答案并显示更正后的代码,我会很乐意给予好评它 – Carsten

+0

您可能要扩大这个回答有点,因为它是正确的,但它不是从你如何写清楚,并且需要更多一点的阐述。 – Alex