Чтение целого числа из пользовательского ввода
то, что я ищу-это как прочитать целое число, которое было дано пользователем из командной строки (консольный проект). Я в первую очередь знаю C++ и начал вниз по пути C#. Я знаю эту консоль.ReadLine (); принимает только символ/строку. Короче говоря, я ищу целочисленную версию этого.
просто чтобы дать вам представление о том, что я делаю именно:
Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
Console.ReadLine(); // Needs to take in int rather than string or char.
Я искал довольно долго для этого. Я нашел много на C, но не C#. Я нашел однако поток, на другом сайте, который предложил преобразовать из char в int. Я уверен, что должен быть более прямой путь, чем преобразование.
9 ответов:
вы можете преобразовать строку в целое число, используя преобразовать.ToInt32() функции
int intTemp = Convert.ToInt32(Console.ReadLine());
Я бы предложил вам использовать
TryParse:Console.WriteLine("1. Add account."); Console.WriteLine("Enter choice: "); string input = Console.ReadLine(); int number; Int32.TryParse(input, out number);таким образом, ваше приложение не выдает исключение, если вы пытаетесь разобрать что-то вроде "1q" или "23e", потому что кто-то сделал ошибочный ввод.
Int32.TryParseвозвращает логическое значение, так что вы можете использовать его вifзаявление, чтобы увидеть, нужно ли вам ветвь вашего кода:int number; if(!Int32.TryParse(input, out number)) { //no, not able to parse, repeat, throw exception, use fallback value? }на ваш вопрос: вы не найдете решение для чтения целого числа, потому что
ReadLine()чтение весь командная строка, threfor возвращает строку. Что вы можете сделать, это попытаться преобразовать этот вход в переменную int16/32/64.есть несколько методов для этого:
если вы сомневаетесь в вводе, который должен быть преобразован, всегда переходите к методам TryParse, независимо от того, пытаетесь ли вы разобрать строки, int переменная или что нет.
обновление В C# 7.0 переменные out могут быть объявлены непосредственно там, где они передаются в качестве аргумента, поэтому приведенный выше код может быть сжат в следующее:
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(); } }здесь вы можете видеть, что переменная
number1инициализируется, даже если вход не является числом и имеет значение 0 независимо, поэтому он действителен даже вне объявления if block
вам нужно ввести ввод. попробуйте использовать следующие
int input = Convert.ToInt32(Console.ReadLine());Он будет бросать исключение, если значение не является числовым.
Edit
Я понимаю, что вышеизложенное является быстрым. Я хотел бы улучшить свой ответ:
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));
Я не видел хорошего и полного ответа на ваш вопрос, поэтому я покажу более полный пример. Есть несколько методов, показывающих, как получить целочисленный ввод от пользователя, но всякий раз, когда вы это делаете, вам обычно также нужно
- проверка ввода
- отображение сообщения об ошибке, если неверный ввод дается, и
- цикл до тех пор, пока не будет задан допустимый вход.
в этом примере показано, как получить целочисленное значение из пользователь, который равен или больше 1. Если указан неверный ввод, он поймает ошибку, отобразит сообщение об ошибке и попросит пользователя повторить попытку для правильного ввода.
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в вашем вопросе, похоже, вы хотите использовать это меню. Поэтому, если вы хотите получить int input для выбора опции меню, вы можете изменить оператор if на
if ( (intUserInput >= 1) && (intUserInput <= 4) )это будет работать, если вам нужно, чтобы пользователь выбрал вариант 1, 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());Это должно работать для оператора case.
он работает с оператором switch и не вызывает исключения.
Comments