从用户input中读取一个整数

我正在寻找的是如何读取用户从命令行(控制台项目)给出的整数。 我主要知道C ++,并开始了C#path。 我知道,Console.ReadLine(); 只需要一个字符/string。 所以总之我正在寻找这个整数版本。

只是为了让你知道我在做什么:

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

我一直在寻找这一点。 我发现了很多C但不是C#。 但是,我发现在另一个网站上有一个线程,build议从char转换为int。 我相信必须有比转换更直接的方式。

您可以使用Convert.ToInt32()函数将string转换为整数

 int intTemp = Convert.ToInt32(Console.ReadLine()); 

我会build议你使用TryParse

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

这样,如果您尝试parsing“1q”或“23e”之类的东西,那么您的应用程序不会抛出exception,因为有人input了错误信息。

Int32.TryParse返回一个布尔值,所以你可以在if语句中使用它,看你是否需要分支你的代码:

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

对于你的问题:你不会find一个读取整数的解决scheme,因为ReadLine()读取整个命令行,threfor返回一个string。 你可以做的是,尝试将这个input转换为int16 / 32/64variables。

有几种方法:

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

如果您对要转换的input有疑问,那么无论您尝试parsingstring,intvariables还是不是,都要始终使用TryParse方法。

更新在C#7.0中,variables可以直接在参数中传入的地方声明,所以上面的代码可以被压缩为:

 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 */ } 

一个完整的例子看起来像这样:

 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(); } } 

在这里你可以看到,即使input不是数字,variablesnumber1也得到了初始化,并且值为0,所以即使在块的声明之外它也是有效的

你需要inputinput。 尝试使用以下内容

 int input = Convert.ToInt32(Console.ReadLine()); 

如果值是非数字的,它将会抛出exception。

编辑

我明白上述是一个快速的。 我想提高我的答案:

 String input = Console.ReadLine(); int selectedOption; if(int.TryParse(input, out selectedOption)) { switch(selectedOption) { case 1: //your code here. break; case 2: //another one. break; //. and so on, default.. } } else { //print error indicating non-numeric input is unsupported or something more meaningful. } 

我用int intTemp = Convert.ToInt32(Console.ReadLine()); 它运作良好,这是我的例子:

  int balance = 10000; int retrieve = 0; Console.Write("Hello, write the amount you want to retrieve: "); retrieve = Convert.ToInt32(Console.ReadLine()); 

更好的方法是使用TryParse:

 Int32 _userInput; if(Int32.TryParse (Console.Readline(), out _userInput) {// do the stuff on userInput} 
 int op = 0; string in = string.Empty; do { Console.WriteLine("enter choice"); in = Console.ReadLine(); } while (!int.TryParse(in, out op)); 

我没有看到你的问题的一个很好和完整的答案,所以我会展示一个更完整的例子。 有一些方法发布如何从用户获得整数input,但是每当你这样做,你通常也需要

  1. validationinput
  2. 如果input无效,则显示错误消息
  3. 循环直到给出有效的input。

此示例显示如何从用户获得等于或大于1的整数值。如果给出了无效input,它将捕获错误,显示错误消息并请求用户再次尝试正确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 

在你的问题看起来你想用这个菜单选项。 所以如果你想得到intinput来select一个菜单选项,你可以改变if语句

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

如果您需要用户select1,2,3或4的选项,这将工作。

 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(); } 

你可以继续尝试:

  Console.WriteLine("1. Add account."); Console.WriteLine("Enter choice: "); int choice=int.Parse(Console.ReadLine()); 

这应该适用于案件陈述。

它与switch语句一起工作,不会抛出exception。