我正在寻找的是如何读取用户从命令行(控制台项目)给出的整数。我主要了解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的线程。我确信必须有比转换更直接的方式。
答案 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的整数值。如果给出无效输入,它将捕获错误,显示错误消息,并请求用户再次尝试正确的输入。
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是唯一可以从用户那里获取确切输入的方法, 请纠正我的知识。