如何让用户在c#中一次输入多个值?
本文关键字:输入 一次 用户 | 更新日期: 2023-09-27 18:18:41
我提示用户在一个提示符中输入他们的第一个中间名和姓氏。因此,如果他们输入例如John Ronald Doe,我如何从一个字符串中获取这些值并将它们赋值给fname mname lname,以创建一个person构造函数来获取这些值。
基本上,我的问题是如何在一个提示符中为用户获取多个值,然后将它们分配给构造函数的不同变量。
谢谢!
抓取一行,然后留白。你们需要做一些输入验证来确保他们确实输入了fName mName lName
,但是我会把这个留给你们,因为你们所做的取决于应用需要有多健壮。我的意思是,如果用户只输入两个单词会发生什么?你只是假设它的名字和姓氏,并将他们的中间名设置为String.Empty
吗?如果他们输入4或5个单词会发生什么?
string[] tokens = Console.ReadLine().Split(' ');
if (tokens.Length == 3)
{
// do assignment
}
关于你的评论;
或多或少是正确的。真正发生的是ReadLine()
返回一个字符串。我只是在结果上直接调用Split(' ')
。如果你愿意,你可以把它分成两行,但没有理由这样做。Split(char delimiter)
是String
类中的一个实例方法。它接受一个char并返回一个字符串数组。我用令牌是因为这是一种常见的术语。该行由三个标记组成,分别是名、中、姓。重要的是要理解我没有向数组添加任何东西,Split(' ')
返回一个数组。string[] tokens
只是声明了一个string[]
类型的引用,我不需要担心大小或类似的事情。
从输入中获取整型数组的示例。注意,如果任何输入不是有效整数,将抛出异常。
int[] myInts = Console.ReadLine.Split(' ').Select(x => int.Parse(x)).ToArray();
在这个例子中,我对分割的结果使用LINQ。Split返回一个字符串数组。Select
迭代该数组并将lambda表达式应用于我传递给它的每个值。最好将x
视为当前值。这里的Select
调用大致相当于;
List<int> myInts = new List<int>();
foreach (string s in tokens)
{
myInts.Add(int.Parse(s));
}
int[] myIntArray = myInts.ToArray();
如果你不能信任用户输入,你应该使用TryParse
。我不知道你是否可以使用它作为lambda表达式的一部分(如果你可以,我不会感到惊讶,但这似乎是一个痛苦的屁股,所以我不会麻烦),而是我做;
List<int> myInts = new List<int>();
int temp;
foreach (string s in tokens)
{
if (int.TryParse(s, temp)
myInts.Add(temp);
else
// the input wasn't an int
}
int[] myIntArray = myInts.ToArray();