Подтвердить что ты не робот

Чтение целого числа из пользовательского ввода

Я ищу, как читать целое число, заданное пользователем из командной строки (проект консоли). Я прежде всего знаю С++ и начал путь С#. Я знаю, что 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. Я уверен, что должен быть более прямой путь, чем преобразование.

4b9b3361

Ответ 1

Вы можете преобразовать строку в целое число с помощью Convert.ToInt32() function

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

Ответ 2

Я предлагаю вам использовать 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 независимо, поэтому он действителен даже вне объявления, если блок

Ответ 3

Вам нужно ввести тип ввода. попробуйте использовать следующие

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.
}

Ответ 4

int op = 0;
string in = string.Empty;
do
{
    Console.WriteLine("enter choice");
    in = Console.ReadLine();
} while (!int.TryParse(in, out op));

Ответ 5

Я использовал 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());

Ответ 6

Лучше всего использовать TryParse:

Int32 _userInput;
if(Int32.TryParse (Console.Readline(), out _userInput) {// do the stuff on userInput}

Ответ 7

Я не нашел хорошего и полного ответа на ваш вопрос, поэтому я покажу более полный пример. Есть несколько способов публикации, показывающих, как получить целочисленный ввод от пользователя, но всякий раз, когда вы делаете это, вам обычно также нужно

  • проверить ввод
  • отображает сообщение об ошибке, если недействительный ввод , и
  • пока не будет введен действительный ввод.

В этом примере показано, как получить целочисленное значение от пользователя, который равен или больше 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.

Ответ 8

Используйте эту простую строку:

int x = int.Parse(Console.ReadLine());

Ответ 9

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

    }

Ответ 10

Вы можете просто пойти и попробовать:

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

Это должно работать для утверждения case.

Он работает с оператором switch и не генерирует исключение.

Ответ 11

--int я = Convert.ToInt32 (Console.Read());

Мне пришлось попробовать это после прочтения вышеупомянутого разговора, но я обнаружил, что даже если я передал "1" в качестве ввода, он отображался как 49, то есть ReadLine - единственный метод, который может получить точные данные от пользователя, как мой опыт, исправить мои знание пожалуйста.