Ответ 1
Вы можете преобразовать строку в целое число с помощью Convert.ToInt32() function
int intTemp = Convert.ToInt32(Console.ReadLine());
Я ищу, как читать целое число, заданное пользователем из командной строки (проект консоли). Я прежде всего знаю С++ и начал путь С#. Я знаю, что Console.ReadLine(); принимает только строку char/. Короче говоря, я ищу целую версию этого.
Просто, чтобы дать вам представление о том, что я делаю точно:
Console.WriteLine("1. Add account.");
Console.WriteLine("Enter choice: ");
Console.ReadLine(); // Needs to take in int rather than string or char.
Я искал довольно долгое время для этого. Я нашел много на C, но не на С#. Однако я нашел поток на другом сайте, который предложил конвертировать из char в int. Я уверен, что должен быть более прямой путь, чем преобразование.
Вы можете преобразовать строку в целое число с помощью Convert.ToInt32() function
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 или что нет.
Обновление В С# 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 независимо, поэтому он действителен даже вне объявления, если блок
Вам нужно ввести тип ввода. попробуйте использовать следующие
int input = Convert.ToInt32(Console.ReadLine());
Он будет генерировать исключение, если значение не является числовым.
Я понимаю, что приведенное выше быстро. Я хотел бы улучшить свой ответ:
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 op = 0;
string in = string.Empty;
do
{
Console.WriteLine("enter choice");
in = Console.ReadLine();
} while (!int.TryParse(in, out op));
Я использовал 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}
Я не нашел хорошего и полного ответа на ваш вопрос, поэтому я покажу более полный пример. Есть несколько способов публикации, показывающих, как получить целочисленный ввод от пользователя, но всякий раз, когда вы делаете это, вам обычно также нужно
В этом примере показано, как получить целочисленное значение от пользователя, который равен или больше 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-вход для выбора опции меню, вы можете изменить оператор if на
if ( (intUserInput >= 1) && (intUserInput <= 4) )
Это будет работать, если вам нужно, чтобы пользователь выбрал вариант 1, 2, 3 или 4.
Используйте эту простую строку:
int x = int.Parse(Console.ReadLine());
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 и не генерирует исключение.
--int я = Convert.ToInt32 (Console.Read());
Мне пришлось попробовать это после прочтения вышеупомянутого разговора, но я обнаружил, что даже если я передал "1" в качестве ввода, он отображался как 49, то есть ReadLine - единственный метод, который может получить точные данные от пользователя, как мой опыт, исправить мои знание пожалуйста.