-1

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
4

3 に答える 3

4

このコード行:

string student = parsedInput[0] = students[0];

最初にコピーstudents[0]parsedInput[0] ます。 したがって、解析された入力が失われています。

代わりに、次を試してください。

string student = parsedInput[0];
students[0] = student;

それが実際にあなたの意図である場合。コードの同じ行で 2 つの代入を行うことは、ほとんど良い考えではありません。

や のように、インデクサーiの代わりに実際に使用したい可能性があります。0parsedInput[i]students[i]

于 2012-12-12T17:44:54.600 に答える
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]);
    }
}

ユーザーは空白行を入力することで do ループから抜けることができるため、iステートメントforでは ではなくの値を使用していることに注意してください。MAX以前iに入力されたアイテムの数が常に含まれます。

もちろん、このコードには、実際に必要となるエラー処理はまだ含まれていません。

于 2012-12-12T17:50:41.227 に答える
0

2 つのリストを作成するだけで...

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);
}
于 2012-12-12T17:52:09.327 に答える