我是.net的初学者,我做了一个简单的控制台应用程序,它的工作原理。我的问题是,当我输入输入时,输入必须在新行中 例如:
1
2
3
我如何输入
1 2
3
我正在使用以下代码
int a, b, c,d;
Console.WriteLine("Enter the numbers:");
a = Convert.ToInt32(Console.ReadLine());
b = Convert.ToInt32(Console.ReadLine());
c = Convert.ToInt32(Console.ReadLine());
d = a + b + c;
Console.WriteLine("Sum:" + d);
答案 0 :(得分:0)
一种选择是接受单行输入作为字符串然后处理它。例如:
//Read line, and split it by whitespace into an array of strings
//1 2
string[] tokens = Console.ReadLine().Split();
//Parse element 0
int a = int.Parse(tokens[0]);
//Parse element 1
int b = int.Parse(tokens[1]);
这种方法的一个问题是,如果用户没有以预期格式输入文本,它将失败(通过抛出IndexOutOfRangeException/ FormatException
)。如果可以,则必须验证输入。
例如,使用regular expressions
:
string line = Console.ReadLine();
// If the line consists of a sequence of digits, followed by whitespaces,
// followed by another sequence of digits (doesn't handle overflows)
if(new Regex(@"^\d+\s+\d+$").IsMatch(line))
{
... // Valid: process input
}
else
{
... // Invalid input
}
可替换地:
验证输入分成2个字符串。
使用int。TryParse
尝试将字符串解析为数字。
这是一个例子:
class Program
{
private static void Main(string[] args)
{
int a = 0,
b = 0;
Console.WriteLine("Enter the numbers:");
var readLine = Console.ReadLine();
if (readLine != null)
{
// If the line consists of a sequence of digits, followed by whitespaces,
// followed by another sequence of digits (doesn't handle overflows)
if (new Regex(@"^\d+\s+\d+$").IsMatch(readLine))
{
string[] tokens = readLine.Split();
//Parse element 0
a = int.Parse(tokens[0]);
//Parse element 1
b = int.Parse(tokens[1]);
}
else
{
Console.WriteLine("Please enter numbers");
}
}
var c = Convert.ToInt32(Console.ReadLine());
var d = a + b + c;
Console.WriteLine("Sum:" + d);
}
}
答案 1 :(得分:0)
编写输入解析器... ReadLine,按空格字符拆分结果字符串,并将每个段提供给int转换器并求它们。
下面给出的示例利用Linq,它有点功能,允许链接由分割产生的令牌数组,并对其每个元素执行操作。即Select(...)
基本上是一个map函数,它将Convert.ToInt32
应用于令牌数组中的每个元素,然后将其传递到到目前为止记忆结果的Aggregate
函数中(从0开始并继续添加现在转换的int标记数组中的下一个元素...由s + t
表示,其中s
是当前的memoized种子,t
是迭代中的当前标记。)
using System;
using System.Linq;
public class Program
{
public static void Main()
{
var str = Console.ReadLine();
var tokens = str.Split(' ');
var result = tokens.Select(t => Convert.ToInt32(t)).Aggregate(0, (s, t) => s + t);
Console.WriteLine(result);
}
}
为了完整起见......第二个版本应该更能抵抗错误:
using System;
using System.Linq;
public class Program
{
public static void Main()
{
Console.WriteLine("Enter 1 or more numbers separated by space in between. I.e. 1 2\nAny non numerical will be treated as 0:");
var str = Console.ReadLine();
if (string.IsNullOrWhiteSpace(str))
{
Console.WriteLine("Sorry, expecting 1 or more numbers separated by space in betwen. I.e. 5 6 8 9");
}
else
{
var tokens = str.Split(' ');
var result = tokens
.Select(t =>
{
int i;
if (int.TryParse(t, out i))
{
Console.WriteLine("Valid Number Detected: {0}", i);
};
return i;
})
.Aggregate(0, (s, t) => s + t);
Console.WriteLine("Sum of all numbers is {0}", result);
}
Console.ReadLine();
}
}
答案 2 :(得分:0)
您正在使用Console.ReadLine()读取整行。
文档:
一行定义为字符序列,后跟回车符(十六进制0x000d),换行符(十六进制0x000a)或Environment.NewLine属性的值。返回的字符串不包含终止字符。
您可以读取整行然后处理它,例如使用String.Split方法。