How can we trigger X when the user says y ANYWHERE - c#

For example
Console.WriteLine("Please input your age: ");
string age = Console.ReadLine();
Console.WriteLine("Please input your first name: ");
string firstname = Console.ReadLine();
Console.WriteLine("Please input your last name: ");
string lastname = Console.ReadLine();
Console.WriteLine("Thank you!");
Now pretend I have something like this but with a lot of more questions. Then I wouldn't want to keep putting an if statement on each one. How would I make it run this code:
Console.WriteLine("beta")
whenever the user says "alpha" without putting if statements on each user input?

As already suggested, make a function that receives a prompt and returns the response. Inside that, you can check for "alpha" and output "beta", though I suspect that's not ~really~ what you need to do:
static void Main(string[] args)
{
string age = GetResponse("Please input your age: ");
string firstname = GetResponse("Please input your first name: ");
string lastname = GetResponse("Please input your last name: ");
Console.WriteLine("Thank you!");
Console.Write("Press Enter to Quit");
Console.ReadLine();
}
static string GetResponse(string prompt)
{
Console.Write(prompt);
string response = Console.ReadLine();
if (response == "alpha")
{
Console.WriteLine("beta");
}
return response;
}

Related

Can't append a list to an existing file

I have an existing .txt file that I would like to use to store my data, but when using this code I get an error at line 39 at switch case 1.
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
public static List<Pw> Site = new List<Pw>();
static void Main(string[] args)
{
string file = #"C: \Users\james\Documents\DataFolder\Vault.txt";
string command = "";
while (command != "exit")
{
Console.Clear();
Console.WriteLine("Please enter a command: ");
command = Console.ReadLine().ToLower();
switch (command)
{
case "1":
AddPw();
File.AppendAllLines(file, Pw.Site);
break;
case "2":
if (File.Exists(file))
{
// Read all the content in one string
// and display the string
string str = File.ReadAllText(file);
Console.WriteLine(str);
}
break;
}
}
}
private static void AddPw()
{
Pw pw = new Pw();
Console.Write("Enter the Username/Email: ");
pw.Username = Console.ReadLine();
Console.Write("Enter Full Name: ");
pw.FullName = Console.ReadLine();
Console.Write("Enter Phone Number: ");
pw.PhoneNumber = Console.ReadLine();
Console.Write("Enter Your Password: ");
string password = Console.ReadLine();
pw.Password = password;
Site.Add(pw);
}
private static void PrintPw(Pw pw)
{
Console.WriteLine("Username/Email: " + pw.Username);
Console.WriteLine("Full Name: " + pw.FullName);
Console.WriteLine("Phone Number: " + pw.PhoneNumber);
Console.WriteLine("Password: " + pw.Password[0]);
Console.WriteLine("-------------------------------------------");
}
private static void ListPw()
{
if (Site.Count == 0)
{
Console.WriteLine("Your address book is empty. Press any key to continue.");
Console.ReadKey();
return;
}
Console.WriteLine("Here are the current people in your address book:\n");
foreach (var pw in Site)
{
PrintPw(pw);
}
Console.WriteLine("\nPress any key to continue.");
Console.ReadKey();
}
}
public class Pw
{
public string Username { get; set; }
public string FullName { get; set; }
public string PhoneNumber { get; set; }
public string Password { get; set; }
}
I have updated your existing function.
using this function you can add and append data in existing file.
private static void AddPw(string filePath)
{
try
{
Pw pw = new Pw();
if (!File.Exists(filePath))
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath))
{
Console.Write("Enter the Username/Email: ");
pw.Username = Console.ReadLine();
sw.WriteLine(pw.Username);
Console.Write("Enter Full Name: ");
pw.FullName = Console.ReadLine();
sw.WriteLine(pw.FullName);
Console.Write("Enter Phone Number: ");
pw.PhoneNumber = Console.ReadLine();
sw.WriteLine(pw.PhoneNumber);
Console.Write("Enter Your Password: ");
pw.Password = Console.ReadLine();
sw.WriteLine(pw.Password);
}
}
else
{
using (StreamWriter sw = File.AppendText(filePath))
{
Console.Write("Enter the Username/Email: ");
pw.Username = Console.ReadLine();
sw.WriteLine(pw.Username);
Console.Write("Enter Full Name: ");
pw.FullName = Console.ReadLine();
sw.WriteLine(pw.FullName);
Console.Write("Enter Phone Number: ");
pw.PhoneNumber = Console.ReadLine();
sw.WriteLine(pw.PhoneNumber);
Console.Write("Enter Your Password: ");
pw.Password = Console.ReadLine();
sw.WriteLine(pw.Password);
}
}
}
catch (Exception ex)
{
}
}
File.AppendAllLines(file, Pw.Site);
In this line, you need to pass an IEnumerable for AppendAllLines to work. You can easily convert Site (which is List<Pw>) to an IEnumerable<string> using the ConvertAll method. Here's one way of achieving this:
Replace that line with this:
File.AppendAllLines(file, Site.ConvertAll<string>(
(p) => string.Format("{0} | {1} | {2} | {3}\n",
p.Username,
p.FullName,
p.PhoneNumber,
p.Password
))
);
This "lambda" basically takes your Pw object and converts it into a string inline.

how to make this bool in my c# program work

I'm new to programming, basically, as you will be able to see everything works up until I want to ask if the details are correct, whatever I type in it will always take the details as correct, I want to be able to type yes or no to the confirmation. I would really appreciate someone explain this to me so i can use bools properly
namespace UserFeedBack.cs
{
class MainClass
{
static void Main(string[] args)
{
Console.Write("Enter your name : ");
string Name = Console.ReadLine();
Console.WriteLine("Hey there, " +Name );
Console.ReadLine();
Console.Write("How old are you : ");
string Age = Console.ReadLine();
Console.WriteLine(" Hello " + Name + " you are " + Age + "!");
Console.Write("bank card account number :");
string AccountNumber = Console.ReadLine();
Console.WriteLine("Thank you! to confirm, is your account number : " + AccountNumber);
Console.ReadLine();
bool y = true;
if (y)
{
Console.WriteLine("Thank you, we can confirm your details are correct");
}
else
{
Console.WriteLine("re enter your details : ");
}
Console.ReadLine();
}
}
}
You've declared your bool property bool y = true;, and doing that sets the value of the bool to be always true. what you need to do is evaluate what the user is typing with Console.ReadLine(). If the user type "Yes" then you change the property to true, else you change it to false, like this:
class MainClass
{
static void Main(string[] args)
{
Console.Write("Enter your name : ");
string Name = Console.ReadLine();
Console.WriteLine("Hey there, " +Name );
Console.ReadLine();
Console.Write("How old are you : ");
string Age = Console.ReadLine();
Console.WriteLine(" Hello " + Name + " you are " + Age + "!");
Console.Write("bank card account number :");
string AccountNumber = Console.ReadLine();
Console.WriteLine("Thank you! to confirm, is your account number : " + AccountNumber);
bool confirmed = Console.ReadLine().ToLower() == "yes";
if (confirmed)
{
Console.WriteLine("Thank you, we can confirm your details are correct");
}
else
{
Console.WriteLine("re enter your details : ");
}
Console.ReadLine();
}
}

i have a switch statement but i dont know how to change it to how i need it

I have a switch statement where the first case is "" as I want to check if the string is empty. My problem is that I need another case which is able to check if there is something within the variable, 'sName', but I don't know how to write this out.
You can ignore what is within the cases but the case in bold that contains dashes is the one I need changing.
(relevant code)
string sName = "";
int iChoice = 0;
switch (sName)
{
case "":
Console.Clear();
Console.WriteLine("You are not yet logged in, would you like to create a new account?\n");
Console.WriteLine("------------------------------------------------------------------------------------------------------------------");
Console.WriteLine("PLEASE NOTE: IF YOU ATTEMPT TO CREATE A NEW ACCOUNT WITH AN EXISTING NAME, YOUR PREVIOUS DATA WILL BE OVERWRITTEN!");
Console.WriteLine("------------------------------------------------------------------------------------------------------------------");
Console.WriteLine("\n1. Create a new account");
Console.WriteLine("2. Login");
iChoice = Convert.ToInt32(Console.ReadLine());
switch (iChoice)
{
case 1:
//outputs text to the console
Console.Write("What is your name? ");
//stores user input into variable sName
sName = Console.ReadLine();
//outputs text to the console
Console.Write("\nWhich school do you work at? ");
//stores user input into variable sSchool
sSchool = Console.ReadLine();
//outputs text to the console
Console.Write("\nWhat class do you teach? ");
//stores user input into variable sClass
sClass = Console.ReadLine();
//outputs the user's name
Console.WriteLine("\nYou are now logged in as " + sName + "\n");
//creates a new text file using the users name
using (StreamWriter sw = new StreamWriter(sName + ".txt"))
{
//writes to the text file using the variables
sw.WriteLine(sName);
sw.WriteLine(sSchool);
sw.WriteLine(sClass);
}
Console.Clear();
displayMenu();
iOption = Convert.ToInt32(Console.ReadLine());
break;
case 2:
//outputs text to the console
Console.Write("What is your name? ");
//stores user input into variable sName
sName = Console.ReadLine();
Console.Clear();
displayMenu();
iOption = Convert.ToInt32(Console.ReadLine());
break;
}
Console.ReadKey();
Console.Clear();
displayMenu();
iOption = Convert.ToInt32(Console.ReadLine());
break;
***case --------------------------------:***
{
Console.Clear();
Console.WriteLine("You are already logged in as " + sName);
Console.WriteLine("You are not yet logged in, would you like to create a new account?\n");
Console.WriteLine("------------------------------------------------------------------------------------------------------------------");
Console.WriteLine("PLEASE NOTE: IF YOU ATTEMPT TO CREATE A NEW ACCOUNT WITH AN EXISTING NAME, YOUR PREVIOUS DATA WILL BE OVERWRITTEN!");
Console.WriteLine("------------------------------------------------------------------------------------------------------------------");
Console.WriteLine("\n1. Create a new account");
Console.WriteLine("2. Login");
iChoice = Convert.ToInt32(Console.ReadLine());
It sounds like you dont need to use a switch, "If" should be good enough
If all you want to do is perform two different actions depending on whether sName contains an empty string or not, then I wouldn't use switch/case at all. if/else is made for the job:
if( sName == "" ) {
// sName is empty
} else {
// sName is not empty
}
If you do want to use a switch for some reason, you'd use default for the non-empty condition, like this:
switch( sName ) {
case "":
// sName is empty
break;
default:
// sName is not empty
break;
}
Either way will do exactly the same thing, but as you can see the if/else is quite a bit simpler.

Prevent empty console input from user in c#

Hi I would like to prevent users from entering nothing in the input field.
I've tried using an if else but the console keeps crashing when there's no input. (for both user input and ldap address input ==> I want it to show "No input detected." and allow the user to re-enter the username)
And if I used (results == " "), I would get a error:
"Operator '==' cannot be applied to operands of type
'System.DirectoryServices.SearchResult' and 'string'"
Is there any way for me to resolve this? The codes are as shown below.
Affected codes from line 16 onwards (for the top block of codes)
if (results != null)
{
//Check is account activated
bool isAccountActived = IsActive(results.GetDirectoryEntry());
if (isAccountActived)
Console.WriteLine(targetUserName + "'s account is active.");
else
Console.WriteLine(targetUserName + "'s account is inactive.");
//Check is account expired or locked
bool isAccountLocked = IsAccountLockOrExpired(results.GetDirectoryEntry());
if (isAccountLocked)
Console.WriteLine(targetUserName + "'s account is locked or has expired.");
else
Console.WriteLine(targetUserName + "'s account is not locked or expired.");
Console.WriteLine("\nEnter bye to exit.");
Console.WriteLine("Press any key to continue.\n\n");
}
else if (results == " ")
{
//no user entered
Console.WriteLine("No input detected!");
Console.WriteLine("\nEnter bye to exit.");
Console.WriteLine("Press any key to continue.\n");
}
else
{
//user does not exist
Console.WriteLine("User not found!");
Console.WriteLine("\nEnter bye to exit.");
Console.WriteLine("Press any key to continue.\n");
}
If it helps, I've attached the whole code below.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.DirectoryServices;
using System.DirectoryServices.AccountManagement;
using System.Net;
using System.Net.Sockets;
using System.Net.NetworkInformation;
using System.Data.SqlClient;
namespace ConsoleApplication2
{
class Program
{
const String serviceAccountUserName = "mobileuser1";
const String serviceAccountPassword = "password123$";
const int UF_LOCKOUT = 0x0010;
const int UF_PASSWORD_EXPIRED = 0x800000;
static void Main(string[] args)
{
string line;
Console.WriteLine("Welcome to account validator V1.0.\n"+"Please enter the ldap address to proceed.");
Console.Write("\nEnter address: ");
String ldapAddress = Console.ReadLine();
try
{
if (ldapAddress != null)
{
Console.WriteLine("\nQuerying for users in " + ldapAddress);
//start of do-while
do
{
Console.WriteLine("\nPlease enter the user's account name to proceed.");
Console.Write("\nUsername: ");
String targetUserName = Console.ReadLine();
bool isValid = false;
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, ldapAddress))
{
// validate the credentials
isValid = pc.ValidateCredentials(serviceAccountUserName, serviceAccountPassword);
// search AD data
DirectoryEntry entry = new DirectoryEntry("LDAP://" + ldapAddress, serviceAccountUserName, serviceAccountPassword);
//create instance fo the directory searcher
DirectorySearcher desearch = new DirectorySearcher(entry);
//set the search filter
desearch.Filter = "(&(sAMAccountName=" + targetUserName + ")(objectcategory=user))";
//find the first instance
SearchResult results = desearch.FindOne();
if (results != null)
{
//Check is account activated
bool isAccountActived = IsActive(results.GetDirectoryEntry());
if (isAccountActived) Console.WriteLine(targetUserName + "'s account is active.");
else Console.WriteLine(targetUserName + "'s account is inactive.");
//Check is account expired or locked
bool isAccountLocked = IsAccountLockOrExpired(results.GetDirectoryEntry());
if (isAccountLocked) Console.WriteLine(targetUserName + "'s account is locked or has expired.");
else Console.WriteLine(targetUserName + "'s account is not locked or expired.");
Console.WriteLine("\nEnter bye to exit.");
Console.WriteLine("Press any key to continue.\n\n");
}
else if (results == " ")
{
//no user entered
Console.WriteLine("No input detected!");
Console.WriteLine("\nEnter bye to exit.");
Console.WriteLine("Press any key to continue.\n");
}
else
{
//user does not exist
Console.WriteLine("User not found!");
Console.WriteLine("\nEnter bye to exit.");
Console.WriteLine("Press any key to continue.\n");
}
}//end of using
}//end of do
//leave console when 'bye' is entered
while ((line = Console.ReadLine()) != "bye");
}//end of if for ldap statement
else if (ldapAddress == " ")
{
Console.WriteLine("No input detected.");
Console.ReadLine();
Console.WriteLine("\nEnter bye to exit.");
Console.ReadLine();
Console.WriteLine("Press any key to continue.\n");
Console.ReadLine();
}
else
{
Console.WriteLine("Address not found!");
Console.ReadLine();
Console.WriteLine("\nEnter bye to exit.");
Console.ReadLine();
Console.WriteLine("Press any key to continue.\n");
Console.ReadLine();
}
}//end of try
catch (Exception e)
{
Console.WriteLine("Exception caught:\n\n" + e.ToString());
}
} //end of main void
static private bool IsActive(DirectoryEntry de)
{
if (de.NativeGuid == null) return false;
int flags = (int)de.Properties["userAccountControl"].Value;
return !Convert.ToBoolean(flags & 0x0002);
}
static private bool IsAccountLockOrExpired(DirectoryEntry de)
{
string attribName = "msDS-User-Account-Control-Computed";
de.RefreshCache(new string[] { attribName });
int userFlags = (int)de.Properties[attribName].Value;
return userFlags == UF_LOCKOUT || userFlags == UF_PASSWORD_EXPIRED;
}
}
}
You should put the ReadLine in a loop.
string UserName = "";
do {
Console.Write("Username: ");
UserName = Console.ReadLine();
if (!string.IsNullOrEmpty(UserName)) {
Console.WriteLine("OK");
} else {
Console.WriteLine("Empty input, please try again");
}
} while (string.IsNullOrEmpty(UserName));
You basically repeat the prompt over and over until the string entered by the user is no longer null or empty.
Best method would probably be to create a new function to get a non empty input:
private static string GetInput(string Prompt)
{
string Result = "";
do {
Console.Write(Prompt + ": ");
Result = Console.ReadLine();
if (string.IsNullOrEmpty(Result)) {
Console.WriteLine("Empty input, please try again");
}
} while (string.IsNullOrEmpty(Result));
return Result;
}
You can then just use the function to get your inputs like:
static void Main(string[] args)
{
GetInput("Username");
GetInput("Password");
}
Result:
Try using the code :
(!string.IsNullOrEmpty(input));
This is user first name and last name string
//Make container for the user first name and last name
string myFirstName = "";
string myLastName = "";
//Do while loop
do
{
//Welcomes user to the app and asks for first name then asks for last name
Console.WriteLine("Welcome");
Console.WriteLine("Enter first name: ");
//Takes users first name and last name and saves it in myFirstName and myLastName
myFirstName = Console.ReadLine();
Console.Write("Enter Last name: ");
myLastName = Console.ReadLine();
Console.WriteLine();
//If the first AND (&&) last name is not empty because the user entered first name and last name then display the hello message
if (!string.IsNullOrEmpty(myFirstName) && !string.IsNullOrEmpty(myLastName))
{
Console.WriteLine("Hello " + myFirstName + " " + myLastName + " hope you enjoy your day");
}
else //Else the first name or last name is left empty then display the error message
{
Console.WriteLine("Please enter your first name and last name");
Console.WriteLine();
}
//While if either the first name OR (||) last name is empty then keep asking the user for input
} while (string.IsNullOrEmpty(myFirstName) ||
string.IsNullOrEmpty(myLastName));
Console.ReadLine();
Output:

How do I categorize user input in C#

I've learned how to store a single input of data and return a value based on it.
What I want to do is obtain multiple inputs from the user, then return a result. But how do I define each input?
Like, if I want the first input to be known as 'stock', and the second as 'value', how do I do that?
I hope I explained my question properly.
string stock = Console.ReadLine();
string value = Console.ReadLine();
.. Or am I interpreting your question incorrectly?
Edit: As a response to your comment:
string input = Console.ReadLine(); //enter stock value
string[] parts = input.split(new String[]{ " " });
stock = parts[1];
value = parts[2];
If you wish to actually define a "new" variable named "stock" and give it the value "value", you should look into System.Collections.Generic.Dictionary<key, value>
If #ItzWarty's answer isn't quite what you want, this would allow your users to enter multiple values in one line:
string line = Console.ReadLine();
//whatever chars you wish to split on...
string[] inputs = line.Split(new char[] {' ', ',', ';'});
string stock = inputs[0];
string value = inputs[1];
You can try this code:
string name = String.Empty;
string department = String.Empty;
int age = 0;
Console.WriteLine("Please, enter the name of your employee, then press ENTER");
name = Console.ReadLine();
Console.WriteLine("Please, enter the department of your employee, then press ENTER");
department = Console.ReadLine();
Console.WriteLine("Please, enter the age of your employee, then press ENTER");
Int32.TryParse(Console.ReadLine(), out age); // default 0
Console.WriteLine("Name: " + name);
Console.WriteLine("Department: " + department);
Console.WriteLine("Age: " + age.ToString());

Categories

Resources