从用户输入中读取整数

时间:2014-06-27 04:13:35

标签: c# input

我正在寻找的是如何读取用户从命令行(控制台项目)给出的整数。我主要了解C ++并且已经开始了C#路径。我知道Console.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的线程。我确信必须有比转换更直接的方式。

14 个答案:

答案 0 :(得分:93)

您可以使用Convert.ToInt32()函数

将字符串转换为整数
int intTemp = Convert.ToInt32(Console.ReadLine());

答案 1 :(得分:50)

我建议您使用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块之外它也是有效的

答案 2 :(得分:8)

您需要对输入进行类型转换。尝试使用以下

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

答案 3 :(得分:4)

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

答案 4 :(得分:3)

我使用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());

答案 5 :(得分:2)

更好的方法是使用TryParse:

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

答案 6 :(得分:2)

我没有看到你问题的完整答案,所以我将展示一个更完整的例子。有一些方法发布了如何从用户获取整数输入,但无论何时这样做,您通常还需要

  1. 验证输入
  2. 如果输入无效,
  3. 会显示错误消息 给出了,
  4. 循环直到给出有效输入。
  5. 此示例显示如何从用户获取等于或大于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的选项,这将有效。

答案 7 :(得分:1)

使用以下简单行:

int x = int.parse(console.readline());

答案 8 :(得分:0)

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

    }

答案 9 :(得分:0)

尝试此操作不会引发异常,用户可以重试:

        Console.WriteLine("1. Add account.");
        Console.WriteLine("Enter choice: ");
        int choice = 0;
        while (!Int32.TryParse(Console.ReadLine(), out choice))
        {
            Console.WriteLine("Wrong input! Enter choice number again:");
        }

答案 10 :(得分:0)

您可以创建自己的ReadInt函数,该函数仅允许数字 (此功能可能不是解决此问题的最佳方法,但确实可以做到)

public static int ReadInt()
    {
        string allowedChars = "0123456789";

        ConsoleKeyInfo read = new ConsoleKeyInfo();
        List<char> outInt = new List<char>();

        while(!(read.Key == ConsoleKey.Enter && outInt.Count > 0))
        {
            read = Console.ReadKey(true);
            if (allowedChars.Contains(read.KeyChar.ToString()))
            {
                outInt.Add(read.KeyChar);
                Console.Write(read.KeyChar.ToString());
            }
            if(read.Key == ConsoleKey.Backspace)
            {
                if(outInt.Count > 0)
                {
                    outInt.RemoveAt(outInt.Count - 1);
                    Console.CursorLeft--;
                    Console.Write(" ");
                    Console.CursorLeft--;
                }
            }
        }
        Console.SetCursorPosition(0, Console.CursorTop + 1);
        return int.Parse(new string(outInt.ToArray()));
    }

答案 11 :(得分:0)

简单的方法 int a = int.Parse(Console.ReadLine());

答案 12 :(得分:-1)

你可以继续尝试:

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

这应该适用于案例陈述。

它适用于switch语句,并且不会抛出异常。

答案 13 :(得分:-1)

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

阅读上面的对话后,我不得不尝试这个 但我发现即使我将“ 1”作为输入,它也会显示为49,这意味着 根据我的经验,ReadLine是唯一可以从用户那里获取确切输入的方法, 请纠正我的知识。