使用循环数组来获取字符串输入

时间:2013-04-19 06:27:11

标签: c#

我希望找到一种方法来将用户输入的值分配给我拥有的变量,但是使用循环来获取此条目并将其放置在屏幕上。有没有办法做到这一点?

以下是我的非工作代码,但希望它能提供我想要实现的目标。

public void StudentDetailInput()
    {
        const int startpoint = 2;
        string[] takeinput = new string[] {FirstName, Surname, MiddleName, StudentId, Subject, AddressLine1, AddressLine2, Town, Postcode, Telephone, Email };

        for (int x = 0; x < takeinput.Length; x++)
        {
            Console.SetCursorPosition(30, startpoint + x);
            [x] = Console.ReadLine();
        }
    }

3 个答案:

答案 0 :(得分:4)

您可能想要使用词典:

private Dictionary<string, string> _answers = new Dictionary<string, string>();

public void StudentDetailInput()
{
    string[] takeinput = new string[] { 
        "FirstName", 
        "Surname",
        "MiddleName",
        "StudentId",
        "Subject",
        "AddressLine1", 
        "AddressLine2",
        "Town", 
        "Postcode", 
        "Telephone",
        "Email" 
    };

    _answers.Clear();
    for (int x = 0; x < takeinput.Length; x++)
    {
        Console.Write(takeinput[x] + ": ");
        var answer = Console.ReadLine();
        _answers.Add(takeinput[x], answer);

    }
}

所以你可以这样显示答案:

for(var i = 0; i < _answers.Count; i++)
{
    Console.WriteLine("{0}: {1}", _answers.Keys[i], _answers.Values[i]);
}

如果你担心的是你不想在控制台上使用这么多行,你可以跟踪答案的长度,并尝试将光标放在目前为止的答案后面。这个问题是你需要考虑屏幕的宽度(可以由用户调整)来计算正确的线和位置。

这种结构的另一个问题是用户希望光标向下移动一行(这就是输入),这样用户体验可能会受到影响。

另一种方法是在每次输入后清除屏幕,显示目前为止从控制台第2行开始的所有答案,并将下一个问题放在第一行:

for (int x = 0; x < takeinput.Length; x++)
{
    Console.Clear();
    for(y = 0; y < x; y++)
    {
        Console.SetCursorPosition(0, y + 1);
        Console.WriteLine("{0}: {1}", _answers.Keys[y], _answers.Values[y]);
    }
    Console.SetCursorPosition(0, 0);
    Console.Write(takeinput[x] + ": ");
    var answer = Console.ReadLine();
    _answers.Add(takeinput[x], answer);
}

当问题数量多于控制台上的行数时,这可能会出现严重错误。

答案 1 :(得分:1)

您的字符串数组定义不明确,但我认为您正在寻找类似的内容:

public void StudentDetailInput()
{
    const int startpoint = 2;
    string[] takeinput = new string[11];

    for (int x = 0; x < takeinput.Length; x++)
    {
        Console.SetCursorPosition(30, startpoint + x);
        takeinput[x] = Console.ReadLine();
    }
}

现在

// FirstName = takeinput[0]
// Surname   = takeinput[1]
// ...

答案 2 :(得分:0)

这条线错了。

[x] = Console.ReadLine();

如果要分配数组元素,使用ReadLine()方法阅读的内容,则应使用

takeinput[x] = Console.ReadLine();

如果您只想为计数器分配所阅读的内容,则应使用;

x = Convert.Int32(Console.ReadLine());

编辑 :如果我清楚地理解你的问题,你只想这样做;

List<string> list = new List<string>();
string input = "";

do
{
   input = Console.ReadLine();
   list.Add(input);
}
while (input != "exit");
list.Remove("exit");

foreach (var item in list)
{
   Console.WriteLine(item);
}