Reading an integer from user input

后端 未结 11 749
时光取名叫无心
时光取名叫无心 2020-11-22 09:44

What I am looking for is how to read an integer that was given by the user from the command line (console project). I primarily know C++ and have started down the C# path. I

相关标签:
11条回答
  • 2020-11-22 10:03

    I would suggest you use TryParse:

    Console.WriteLine("1. Add account.");
    Console.WriteLine("Enter choice: ");
    string input = Console.ReadLine();
    int number;
    Int32.TryParse(input, out number);
    

    This way, your application does not throw an exception, if you try to parse something like "1q" or "23e", because somebody made a faulty input.

    Int32.TryParse returns a boolean value, so you can use it in an if statement, to see whether or not you need to branch of your code:

    int number;
    if(!Int32.TryParse(input, out number))
    {
       //no, not able to parse, repeat, throw exception, use fallback value?
    }
    

    To your question: You will not find a solution to read an integer because ReadLine() reads the whole command line, threfor returns a string. What you can do is, try to convert this input into and int16/32/64 variable.

    There are several methods for this:

    • Int.Parse()
    • Convert.ToInt()
    • Int.TryParse()

    If you are in doubt about the input, which is to be converted, always go for the TryParse methods, no matter if you try to parse strings, int variable or what not.

    Update In C# 7.0 out variables can be declared directly where they are passed in as an argument, so the above code could be condensed into this:

    if(Int32.TryParse(input, out int number))
    {
       /* Yes input could be parsed and we can now use number in this code block 
          scope */
    }
    else 
    {
       /* No, input could not be parsed to an integer */
    }
    

    A complete example would look like this:

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            var foo = Console.ReadLine();
            if (int.TryParse(foo, out int number1)) {
                Console.WriteLine($"{number1} is a number");
            }
            else
            {
                Console.WriteLine($"{foo} is not a number");
            }
            Console.WriteLine($"The value of the variable {nameof(number1)} is {number1}");
            Console.ReadLine();
        }
    }
    

    Here you can see, that the variable number1 does get initialized even if the input is not a number and has the value 0 regardless, so it is valid even outside the declaring if block

    0 讨论(0)
  • 2020-11-22 10:03

    Use this simple line:

    int x = int.Parse(Console.ReadLine());
    
    0 讨论(0)
  • 2020-11-22 10:10
    int op = 0;
    string in = string.Empty;
    do
    {
        Console.WriteLine("enter choice");
        in = Console.ReadLine();
    } while (!int.TryParse(in, out op));
    
    0 讨论(0)
  • 2020-11-22 10:11

    I didn't see a good and complete answer to your question, so I will show a more complete example. There are some methods posted showing how to get integer input from the user, but whenever you do this you usually also need to

    1. validate the input
    2. display an error message if invalid input is given, and
    3. loop through until a valid input is given.

    This example shows how to get an integer value from the user that is equal to or greater than 1. If invalid input is given, it will catch the error, display an error message, and request the user to try again for a correct input.

    static void Main(string[] args)
        {
            int intUserInput = 0;
            bool validUserInput = false;
    
            while (validUserInput == false)
            {
                try
                { Console.Write("Please enter an integer value greater than or equal to 1: ");
                  intUserInput = int.Parse(Console.ReadLine()); //try to parse the user input to an int variable
                }  
                catch (Exception) { } //catch exception for invalid input.
    
                if (intUserInput >= 1) //check to see that the user entered int >= 1
                  { validUserInput = true; }
                else { Console.WriteLine("Invalid input. "); }
    
            }//end while
    
            Console.WriteLine("You entered " + intUserInput);
            Console.WriteLine("Press any key to exit ");
            Console.ReadKey();
        }//end main
    

    In your question it looks like you wanted to use this for menu options. So if you wanted to get int input for choosing a menu option you could change the if statement to

    if ( (intUserInput >= 1) && (intUserInput <= 4) )
    

    This would work if you needed the user to pick an option of 1, 2, 3, or 4.

    0 讨论(0)
  • 2020-11-22 10:13
    static void Main(string[] args)
        {
            Console.WriteLine("Please enter a number from 1 to 10");
            int counter = Convert.ToInt32(Console.ReadLine());
            //Here is your variable
            Console.WriteLine("The numbers start from");
            do
            {
                counter++;
                Console.Write(counter + ", ");
    
            } while (counter < 100);
    
            Console.ReadKey();
    
        }
    
    0 讨论(0)
提交回复
热议问题