Reading an integer from user input

2020-01-22 12:24发布

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 know that Console.ReadLine(); only takes a char/string. So in short I am looking for the integer version of this.

Just to give you an idea of what I'm doing exactly:

Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
Console.ReadLine(); // Needs to take in int rather than string or char.

I have been looking for quite a while for this. I have found a lot on C but not C#. I did find however a thread, on another site, that suggested to convert from char to int. I'm sure there has to be a more direct way than converting.

标签: c# input
11条回答
我只想做你的唯一
2楼-- · 2020-01-22 12:54
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();

    }
查看更多
地球回转人心会变
3楼-- · 2020-01-22 12:56

Better way is to use TryParse:

Int32 _userInput;
if(Int32.TryParse (Console.Readline(), out _userInput) {// do the stuff on userInput}
查看更多
小情绪 Triste *
4楼-- · 2020-01-22 12:58

Try this it will not throw exception and user can try again:

        Console.WriteLine("1. Add account.");
        Console.WriteLine("Enter choice: ");
        int choice = 0;
        while (!Int32.TryParse(Console.ReadLine(), out choice))
        {
            Console.WriteLine("Wrong input! Enter choice number again:");
        }
查看更多
该账号已被封号
5楼-- · 2020-01-22 12:59

Use this simple line:

int x = int.Parse(Console.ReadLine());
查看更多
Rolldiameter
6楼-- · 2020-01-22 13:02

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:

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

查看更多
Ridiculous、
7楼-- · 2020-01-22 13:03

I used int intTemp = Convert.ToInt32(Console.ReadLine()); and it worked well, here's my example:

        int balance = 10000;
        int retrieve = 0;
        Console.Write("Hello, write the amount you want to retrieve: ");
        retrieve = Convert.ToInt32(Console.ReadLine());
查看更多
登录 后发表回答