我希望找到一种方法来将用户输入的值分配给我拥有的变量,但是使用循环来获取此条目并将其放置在屏幕上。有没有办法做到这一点?
以下是我的非工作代码,但希望它能提供我想要实现的目标。
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();
}
}
答案 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);
}