我一直在尝试在C#中使用Console.Read()和Console.ReadLine(),但结果却很奇怪。例如这段代码
Console.WriteLine("How many students would you like to enter?");
int amount = Console.Read();
Console.WriteLine("{0} {1}", "amount equals", amount);
for (int i=0; i < amount; i++)
{
Console.WriteLine("Input the name of a student");
String StudentName = Console.ReadLine();
Console.WriteLine("the Students name is " + StudentName);
}
当我输入1学生人数时,一直给我这个金额= 49,我甚至没有机会输入学生姓名。
答案 0 :(得分:9)
这是因为你读了一个char。
使用ReadInt32()
等适当的方法来处理从读取符号到您希望的类型的正确转换。
你得到49
的原因是因为它是'1'符号的字符代码,而不是它是整数表示。
char code
0 : 48
1 : 49
2: 50
...
9: 57
例如:ReadInt32()
可能如下所示:
public static int ReadInt32(string value){
int val = -1;
if(!int.TryParse(value, out val))
return -1;
return val;
}
并使用它:
int val = ReadInt32(Console.ReadLine());
有可能创建extension method
非常好,但不幸的是,无法在静态类型上创建扩展方法,而Console是static
类型。
答案 1 :(得分:3)
对于可能仍需要此人的人:
static void Main(string[] args)
{
Console.WriteLine("How many students would you like to enter?");
var amount = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("{0} {1}", "amount equals", amount);
for (int i = 0; i < amt; i++)
{
Console.WriteLine("Input the name of a student");
String StudentName = Console.ReadLine();
Console.WriteLine("the Students name is " + StudentName);
}
}
答案 2 :(得分:2)
尝试以这种方式更改代码
int amount;
while(true)
{
Console.WriteLine("How many students would you like to enter?");
string number = Console.ReadLine();
if(Int32.TryParse(number, out amount))
break;
}
Console.WriteLine("{0} {1}", "amount equals", amount);
for (int i=0; i < amount; i++)
{
Console.WriteLine("Input the name of a student");
String StudentName = Console.ReadLine();
Console.WriteLine("the Students name is " + StudentName);
}
而是使用Read
使用ReadLine
,然后使用Int32.TryParse
检查用户输入是否真的是整数。如果用户没有输入有效号码,请重复该问题
使用Console.Read
会将您的输入限制为需要转换并检查为有效数字的单个字符。
当然这是一个残酷的例子,没有任何错误检查或任何类型的安全中止循环。
答案 3 :(得分:2)
你从read而不是int得到一个字符char
。你需要先将它作为一个字符串并将其解析为字符串。实现可能如下所示
Console.WriteLine("How many students would you like to enter?");
var read = Console.ReadLine();
int amount;
if(int.TryParse(read,out amount)) {
Console.WriteLine("{0} {1}", "amount equals", amount);
for (int i=0; i < amount; i++)
{
Console.WriteLine("Input the name of a student");
String StudentName = Console.ReadLine();
Console.WriteLine("the Students name is " + StudentName);
}
}
我已将其更改为使用readline,因为readline返回一个字符串并不会随意将学生数限制为9(一位数的最大数字)
答案 4 :(得分:0)
Console.Read()
返回您输入的字符的字符代码。您需要使用Convert.ToChar(amount);
将字符作为字符串,然后您需要int.Parse()
来获取您正在寻找的值。
答案 5 :(得分:0)
而不是:
int amount = Console.Read();
尝试:
int amount = 0;
int.TryParse(Console.ReadLine(), out amount);
因为你只读了字符代码,所以例如输入11你仍然会得到49.你需要读取字符串值并将其解析为int值。如果输入错误,请输入上面的代码。您将获得0。
答案 6 :(得分:0)
Console.Read
返回按下的关键字符的asci值。
如果你使用Console.ReadKey().KeyChar
,你会得到一个代表被按下的实际角色的char
。
然后,您可以使用.ToString()
将该字符转换为一个字符的字符串。
现在您有了一个字符串,您可以使用int.Parse
或int.TryParse
将包含完全数字字符的字符串转换为整数。
所以把它们放在一起:
int value;
if (int.TryParse(Console.ReadKey().KeyChar.ToString(), out value))
{
//use `value` here
}
else
{
//they entered a non-numeric key
}
答案 7 :(得分:0)
Console.WriteLine("How many students would you like to enter?");
string amount = Console.ReadLine();
int amt = Convert.ToInt32(amount);
Console.WriteLine("{0} {1}", "amount equals", amount);
for (int i = 0; i < amt; i++)
{
Console.WriteLine("Input the name of a student");
String StudentName = Console.ReadLine();
Console.WriteLine("the Students name is " + StudentName);
}
//thats it
答案 8 :(得分:0)
试试这个:
int amount = ReadInt32();
或者如果它不起作用试试这个:
int amount = Console.ReadInt32();
或者这个:
int amount = Convert.ToInt32(Console.Readline());
在此,它将读取字符串,然后将其转换为Int32值。
你也可以到这里:http://www.java2s.com/Tutorials/CSharp/System.IO/BinaryReader/C_BinaryReader_ReadInt32.htm
如果无效,请告诉我。
答案 9 :(得分:0)
TL; DR; 在Windows中输入键不是单个字符。这一事实是与Console.Read()
方法相关的许多问题的根源。
完整明细:
如果你在计算机上运行下面的代码,那么你可以解决Console.Read()
背后的许多谜团:
static void Main(string[] args)
{
var c = Console.Read();
Console.WriteLine(c);
c = Console.Read();
Console.WriteLine(c);
}
在运行程序时,只需在键盘上按 Enter 键一次,然后检查控制台上的输出。以下是它的外观:
有趣的是,您只按了一次 Enter 键,但它能够满足我的代码段中的两个Read()
次调用。 在Windows中输入键会为新行字符发出两个字符,即回车符(\r
- ASCII码13)和换行符(\n
- ASCII码10)。您可以在此帖子中详细阅读相关内容 - Does Windows carriage return \r\n consist of two characters or one character?