Question

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.

Was it helpful?

Solution 2

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]);

OTHER TIPS

Multiple problems with your code:

  1. Define your string array like string[] fruit = new string[3];
  2. Since you have defined i in your for loop, you need to use a new variable for your input.
  3. Your condition in for loop should be i < fruit.Length
  4. This is more of a suggestion, use 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.
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]);
}

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.

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"};
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top