显示数组单元格后提示用户输入的问题

时间:2015-02-14 19:38:16

标签: c#

我正在尝试编写一个小程序,在将数组中的每个项目打印到屏幕上之后收集用户的响应。

我可以像这样打印数组中的每个项目:

string[] music = new string[4];
music[0] = "question 1";
music[1] = "question 2";
music[2] = "question 3";
music[3] = "question 4";

foreach (string j in music)
{
    Console.WriteLine(j);
}

但我不确定如何捕获用户的输入。

例如,在用户显示“问题1”后,有没有办法打破,并提示用户输入?这将发生在数组中的每个项目。

1 个答案:

答案 0 :(得分:1)

没有理由跳出循环,你可以把放在循环中。

foreach (string j in music)
{
    Console.WriteLine(j);

    string read = Console.ReadLine(); // This blocks until the user presses 'enter'

    Console.WriteLine(read); // Just echo the response.
}

当然,您也可以调用一个单独的方法来收集和处理响应,这可能是一种更简洁的方法,具体取决于您需要对它们执行多少操作。

这实际上取决于您希望如何使用这些回复,以及您是否想要一次性查看这些回复,而且我不知道您是否了解过Dictionary<TKey, TValue>键入,但这可能是存储映射响应的好方法。

Dictionary<string, string> responses = new Dictionary<string, string>();

foreach (string j in music)
{
    Console.WriteLine(j);

    string read = Console.ReadLine(); // This blocks until the user presses 'enter'

    responses[j] = read;
}

非字典替代方法是使用for循环并使用相同大小的第二个数组来存储music中每个相应元素的响应。

当然,延迟处理的麻烦在于你必须两次遍历集合。在这个规模上没什么大不了的,但是收藏很多,也可能。除非必须这样做,否则不要这样做是个好习惯。


在评论中进行了一些讨论后,听起来这就是您正在寻找的内容。

string[] music = new string[4];
// ... populate music

string[] expectedResponses = new string[music.Length];
// ... populate expected responses

for (int i = 0; i < music.Length; i++)
{
    string j = music[i];
    string expectedResponse = expectedResponses[i];

    string actualResponse = Console.ReadLine();
    if(actualResponse == expectedResponse) // you might want to do something about casing here
    {
        Console.WriteLine("Correct!");
    }
    else
    { 
        Console.WriteLine("Incorrect.");
    }
}