1

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.

6
  • I know I missing my brackets for the main method I was typing fast to ask this question Commented Apr 8, 2014 at 16:48
  • 1
    there is an edit button Commented Apr 8, 2014 at 16:49
  • yes i;m looking for it but cannot find it Commented Apr 8, 2014 at 16:50
  • 2
    what is the ERROR ? Commented Apr 8, 2014 at 16:51
  • 1
    Look at how your array is declared msdn.microsoft.com/en-us/library/aa288453(v=vs.71).aspx Commented Apr 8, 2014 at 16:52

5 Answers 5

4

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.
Sign up to request clarification or add additional context in comments.

Comments

3

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

Comments

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

Comments

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.

Comments

0

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"};

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.