我正在尝试编写一个小程序,在将数组中的每个项目打印到屏幕上之后收集用户的响应。
我可以像这样打印数组中的每个项目:
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”后,有没有办法打破,并提示用户输入?这将发生在数组中的每个项目。
答案 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.");
}
}