Reputation: 13
Hi there I'm very new to C# so please bear with me if my question has a very obvious answer.
I am trying to write a code that displays an array of options to the user with a number to select the option. The user then selects their option and the code will display their selection from the array.
So for example
Select 1 for apples
Select 2 for oranges
Select 3 for pears
Please Enter your Selection :
I keep typing a for loop to display my area but I cannot get my program to read the input from the array this is what I have so far
static void Main(string[] args) {
string[] fruit = [3]
fruit[0]=("apples");
fruit[1]=("oranges");
fruit[2]=("pears");
for (int i = 0; i < fruit.length; i++)
{
Console.WriteLine("Enter {0} to select {1}", i, fruit[i]);
}
string choice = Console.ReadLine();
int i = int.Parse(choice);
Console.WriteLine("You have selected {0} which is {1}", i, fruit[i]);
Console.ReadLine();
}
This gives me an error and if I place this within the for loop then the program does not display me all my options.
Upvotes: 1
Views: 2402
Reputation: 223282
Multiple problems with your code:
string[] fruit = new string[3];
i
in your for loop, you need to use a new variable for your input. for
loop should be i < fruit.Length
int.TryParse
to parse input from console, check if the entered number is an int
and also check if the number is less than the array length. Upvotes: 4
Reputation: 45155
You have multiple typos and you can't use the variable i
twice.
Try this:
static public void Main(string[] args)
{
string[] fruit = new string[3];
fruit[0]=("apples");
fruit[1]=("oranges");
fruit[2]=("pears");
for (int i = 0; i < fruit.Length; i++)
{
Console.WriteLine("Enter {0} to select {1}", i, fruit[i]);
}
string choice = Console.ReadLine();
int j = int.Parse(choice);
Console.WriteLine("You have selected {0} which is {1}", j, fruit[j]);
Console.ReadLine();
}
You might also want to include some error trapping if the user enters something that can't be parsed as an int
(you could use TryParse
for example).
Typos: Your array declaration was wrong and you need a captial L
on length for the array length property.
Upvotes: 1
Reputation: 16697
Your string array declaration is incorrect. Try
string[] fruit = new string[3];
or you can declare and initiate thus:
string[] fruit = new string[3]{"apples", "oranges", "pears"};
or simpler:
string[] fruit = {"apples", "oranges", "pears"};
Upvotes: 0
Reputation: 101614
void Main()
{
// compile a list of possible fruits (remember that c# arrays are
// 0-indexed (first element is actually 0 and not 1))
string[] fruits = new[]{
"apples",
"oranges",
"pears"
};
// iterate over the options and output each one
for (var i = 0; i < fruits.Length; i++){
// add one to index value to make it non-0 based
Console.WriteLine("Enter {0} to select {1}", i + 1, fruits[i]);
}
// continue to read user input until they select a valid choice
Int32 choice = 0;
do
{
// read user input
String input = Console.ReadLine();
// [try to] convert the input to an integer
// if it fails, you'll end up with choice=0
// which will force the while(...) condition to fail
// and, therefore, retry for another selection.
Int32.TryParse(input, out choice);
}
// number should be between 1 and (fruits.Length + 1)
while (choice < 1 || choice > (fruits.Length + 1));
// to reference it, subtract 1 from user's choice to get back to
// 0-indexed array
Console.WriteLine("You have selected {0} which is {1}", choice, fruits[choice - 1]);
}
Upvotes: 2
Reputation: 101701
You need to give different name to your loop variable or the user choice.
Also you might want to use TryParse
intead of Parse
to prevent possible FormatExceptions
:
int userChoice;
if(int.TryParse(choice, out userChoice) && userChoice < fruit.Length)
Console.WriteLine("You have selected {0} which is {1}", userChoice, fruit[userChoice]);
Upvotes: 3