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



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

621   9  

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. проверка ввода
  2. отображение сообщения об ошибке, если неверный ввод дается, и
  3. цикл до тех пор, пока не будет задан допустимый вход.

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

    Ничего не найдено.