0

このプログラムの出力を正しく動作させるにはどうすればよいですか? 文字列配列に値が保存されず、プログラムの最後に出力されない理由がわかりません。ありがとう。

#include <iostream>
#include <string>
using namespace std;
int main ()
{
    int score[100], score1 = -1;
    string word[100];
    do
    {
        score1 = score1 + 1;
        cout << "Please enter a score (-1 to stop): ";
        cin >> score[score1];
    }
    while (score[score1] != -1);
    {
        for (int x = 0; x < score1; x++)
        {
            cout << "Enter a string: ";
            getline(cin,word[x]);
            cin.ignore();
        }
        for (int x = 0; x < score1; x++)
        {
            cout << score[x] << "::" << word[x] << endl; // need output to be 88:: hello there.
        }
    }

}
4

3 に答える 3

1

コードを修正しました。このようなことを試してください

#include <iostream>
#include <string>
using namespace std;
int main ()
{
    int score[100], score1 = -1;
    char word[100][100];
    do
    {
        score1++;
        cout << "Please enter a score (-1 to stop): ";
        cin >> score[score1];
    }
    while (score[score1] != -1);

    cin.ignore();

    for (int x = 0; x < score1; x++)
    {
        cout << "Enter a string: ";
        cin.getline(word[x], 100);
    }

    for (int x = 0; x < score1; x++)
    {
        cout << score[x] << "::" << word[x] << endl; // need output to be 88:: hello there.
    }

}

わかりました、私は何をしましたか? まず、余分な{を削除します。あなたのコードを初めて見たとき、do.while に do..while ループがあるのか​​、while ループがあるのか​​わかりません。次に、行を char 配列に読み取る方法を知っているという理由だけで、string 配列を char 配列に変更します。行から文字列を読み取る必要があるときは、常に独自の関数を使用しますが、本当に文字列を使用したい場合は、ここが良い例です。残りは非常に明白です。cin.ignore()は、改行文字がバッファーに残るため、省略する必要があるため必要です。

編集: コードを修正するためのより良い方法を見つけました。すべて問題ありませんが、cin.ignore()を移動して、 while (score[score1] != -1);の直後に配置する必要があります。. 現在、すべての行の最初の文字を無視しているため、ユーザーが -1 を入力した後の新しい行のみを無視する必要があります。固定コード。

于 2012-07-31T20:08:30.800 に答える
0

最初のループでは、最初の値が割り当てられる前に "score1" をインクリメントします。これにより、インデックス 1 から始まる score[] 配列に値が配置されます。ただし、以下の「for」ループでは、インデックス付けを 0 から開始します。つまり、スコアと文字列の関連付けが 1 ずれます。

于 2012-07-31T19:54:53.487 に答える
0

交換

getline(cin,word[x]);
cin.ignore();

cin >> word[x];

そして、どこが間違っていたのかを突き止めてみてください。

于 2012-07-31T19:56:27.907 に答える