Reputation: 103
I'm mostly new to C# and I've been writing code to practice.
I've written some code where you enter a line of text, or a "login key", and I want to make it where you can confirm that login key.
Here's the code I've done so far, I will use "//" on the part I'm stuck on. (Wont include any unnecessary code.)
Console.WriteLine("Please enter a login key.");
string Key = Console.ReadLine();
Console.WriteLine("You entered, " + Key + " as your login key!");
Console.WriteLine("Are you sure you want to choose this as your login key? "); // This is where I'm stuck at, got no idea how to do a yes/no prompt.
}
Any help would be greatly appreciated.
Upvotes: 10
Views: 49445
Reputation:
Console Prompt [Yes/No]
with my addition being that it can have a default response
public static bool Question(string question, bool defaultYes = true, bool useDefaultAnswer = true)
{
bool setDefault = false;
ConsoleKey keyboardResponse;
do
{
Console.Write($"{question} [Y/N] ");
if (useDefaultAnswer && !setDefault)
{
setDefault = true;
if (defaultYes)
{
Console.WriteLine("Y");
}
else
{
Console.WriteLine("N");
}
}
keyboardResponse = Console.ReadKey(false).Key;
if (keyboardResponse != ConsoleKey.Enter)
{
Console.WriteLine();
}
else
{
if (useDefaultAnswer)
{
break;
}
}
} while (keyboardResponse != ConsoleKey.Y && keyboardResponse != ConsoleKey.N);
if (useDefaultAnswer && keyboardResponse == ConsoleKey.Enter)
{
if (defaultYes)
{
return true;
}
else
{
return false;
}
}
return keyboardResponse == ConsoleKey.Y;
}
I have tested this pretty heavily it works well
Upvotes: 0
Reputation: 458
I remake it like a utils class I hope it's gonna be usefull:
class UtilsConsole
{
public static bool Confirm(string title)
{
ConsoleKey response;
do
{
Console.Write($"{ title } [y/n] ");
response = Console.ReadKey(false).Key;
if (response != ConsoleKey.Enter)
{
Console.WriteLine();
}
} while (response != ConsoleKey.Y && response != ConsoleKey.N);
return (response == ConsoleKey.Y);
}
}
Upvotes: 10
Reputation: 395
I prefer to create a reusable method to handle all future questions. Very simplified version to illustrate basics.
void Main(string[] args)
{
if(PromptConfirmation("Did you answer yes?"))
{
//todo: Handle positive response
}
}
private bool PromptConfirmation(string confirmText)
{
Console.Write(confirmText + " [y/n] : ");
ConsoleKey response = Console.ReadKey(false).Key;
Console.WriteLine();
return (response == ConsoleKey.Y);
}
Upvotes: 3
Reputation: 2223
Use Console.ReadKey();
Console.WriteLine("Press 'y' if you would like awesome!");
ConsoleKeyInfo cki = Console.ReadKey();
if (cki.Key.ToString() == "y")
{
//do what you need for yes
}else {
// presses something other then Y
}
Upvotes: 5
Reputation: 23374
You can easily go overboard on these Console login scripts. Here's my contribution:
bool confirmed = false;
string Key;
do {
Console.Write("Please enter a login key: ");
Key = Console.ReadLine();
Console.WriteLine("You entered, " + Key + " as your login key!");
ConsoleKey response;
do
{
Console.Write("Are you sure you want to choose this as your login key? [y/n] ");
response = Console.ReadKey(false).Key; // true is intercept key (dont show), false is show
if (response != ConsoleKey.Enter)
Console.WriteLine();
} while (response != ConsoleKey.Y && response != ConsoleKey.N);
confirmed = response == ConsoleKey.Y;
} while (!confirmed);
Console.WriteLine("You chose {0}!", Key);
Console.ReadLine();
Sample output:
Please enter a login key: potato
You entered, potato as your login key!
Are you sure you want to choose this as your login key? [y/n] a
Are you sure you want to choose this as your login key? [y/n] s
Are you sure you want to choose this as your login key? [y/n] l
Are you sure you want to choose this as your login key? [y/n] d
Are you sure you want to choose this as your login key? [y/n] k
Are you sure you want to choose this as your login key? [y/n] f
Are you sure you want to choose this as your login key? [y/n] d
Are you sure you want to choose this as your login key? [y/n] n
Please enter a login key: banana
You entered, banana as your login key!
Are you sure you want to choose this as your login key? [y/n] y
You chose banana!
Upvotes: 31
Reputation: 171
You can use a while loop
bool confirmed = false;
while(!confirmed)
{
Console.WriteLine("Please enter a login key.");
string Key = Console.ReadLine();
Console.WriteLine("You entered, " + Key + " as your login key!");
Console.WriteLine("Are you sure you want to choose this as your login key? [yes/no]");
string option = Console.ReadLine();
if (option == "yes")
{
confirmed = true;
}
}
This way if option
is anything but yes
it will remain in the while loop.
Upvotes: 0