What is wrong with my do while loop logic?
I want to prevent users from proceeding further into the application unless they provide the correct input.
Currently, it will only accept one wrong input before it crashes and produces this exception:
System.Exception: at disabler.Program.readInput(String Input) at disabler.Program.detectInput(String Input) at disabler.Program.Main(String[] args)
Here is my code:
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;
}
Here is the code for readInput method:
//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