我无法从do-while循环内部复制数据并在循环外重复它。在分离功能期间,每个学生的考试成绩与他/她的名字在同一行输入。我很抱歉,如果这是一个非常简单的问题,但我找不到任何地方如何解决它。非常感谢您的帮助。
do {
Console.Write("Enter the student's name followed by his/her score on the same line:");
studentAndScore = Console.ReadLine();
if (studentAndScore == "")
{
break;
}
string[] parsedInput;
parsedInput = studentAndScore.Split();
string student = parsedInput[0] = students[0];
score = int.Parse(parsedInput[1]);
score = studentScores[0];
i++;
} while (i<=MAX);
Console.WriteLine("The test scores of the students are:");
Console.WriteLine("students \t scores \t");
//And I need to repeat the list of student names and scores here
答案 0 :(得分:4)
这行代码:
string student = parsedInput[0] = students[0];
首先将students[0]
复制到parsedInput[0]
。所以你丢失了解析后的输入。
相反,请尝试:
string student = parsedInput[0];
students[0] = student;
如果是,那么实际上是你的意图。在同一行代码中进行两项任务很少是个好主意。
您可能真的想在索引器中使用i
而不是0
,例如parsedInput[i]
和students[i]
。
答案 1 :(得分:0)
罗伯特写的是真的。此外,您不使用循环变量i将每个学生存储在数组的不同“插槽”中,因此您将覆盖当前位于同一位置的所有内容。并且数组的声明必须在循环之外,否则它将在每次迭代中擦除它。
总结C#代码示例所需的更改,更正后的版本如下所示:
void Main()
{
int MAX = 20;
var students = new string[MAX];
var scores = new int[MAX];
int i=0;
do {
Console.Write("Enter the student's name followed by his/her score on the same line:");
var studentAndScore = Console.ReadLine();
if (studentAndScore == "")
{
break;
}
string[] parsedInput = studentAndScore.Split();
students[i] = parsedInput[0];
scores[i] = int.Parse(parsedInput[1]);
i++;
} while (i<MAX);
Console.WriteLine("The test scores of the students are:");
Console.WriteLine("students \t scores \t");
for(int k=0; k<i; k++) {
Console.WriteLine("Student: {0}, Score: {1}", students[k], scores[k]);
}
}
请注意,我在i
语句而不是for
中使用MAX
的值,因为用户可以通过输入空行来中断do循环。 i
始终包含之前输入的项目数。
当然,此代码尚未包含任何错误处理,这在现实世界中是必需的。
答案 2 :(得分:0)
只需创建两个列表......
var names = new List<String>();
var scores = new List<Int32>();
...将输入读入列表...
while (true)
{
Console.Write("student/score: ");
var input = Console.ReadLine();
if (String.IsNullOrWhiteSpace(input))
{
var parts = input.Split();
names.Add(parts[0]);
scores.Add(Int32.Parse(parts[1]);
}
else
{
break;
}
}
...并输出清单。
for (var i = 0; i < names.Count; i++)
{
Console.WriteLine("{0}\t{1}", names[i], scores[i]);
}
当然会添加很多错误处理。或者您可以使用字典,但我不确定您对项目订购的保证。
var data = new Dictionary<String, Int32>();
while (true)
{
Console.Write("student/score: ");
var input = Console.ReadLine();
if (String.IsNullOrWhiteSpace(input))
{
var parts = input.Split();
data.Add(parts[0], Int32.Parse(parts[1]));
}
else
{
break;
}
}
foreach (var entry in data)
{
Console.WriteLine("{0}\t{1}", entry.Key, entry.Value);
}