如何让用户在C#中一次输入多个值

时间:2013-06-15 01:55:08

标签: c# prompt

我提示用户在一个提示中输入他们的第一个中间名和姓氏。 因此,如果他们键入例如John Ronald Doe,我如何从该字符串中获取这些值并将它们分配给fname,mname,lname,以创建一个获取这些值的人员构造函数。

基本上我的问题是如何在一个提示中为用户提取多个值,然后将它们分配给构造函数的不同变量。

谢谢!

1 个答案:

答案 0 :(得分:4)

抓住线然后在白色空间分开。您必须进行一些输入验证以确保它们实际输入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的示例。注意,如果任何输入不是有效整数,则会抛出异常。

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