12

したがって、最初の getline をスキップして 2 番目の getline に直接進む関数があります。バッファをクリアしようとしましたが、まだうまくいきません。何が起こっているのですか?

void getData(char* strA, char* strB)
{
    cout << "Enter String 1: ";               // Shows this line
    cin.clear();
    cin.getline(strA, 50);                    // 50 is the character limit, Skipping Input

    cout << endl << "Enter String 2: ";       // Showing This Line
    cin.clear();
    cin.getline(strB, 50);                   // Jumps Straight to this line
}
4

5 に答える 5

21

を使用していないことを確認してくださいcin >> str。関数を呼び出す前に。を使用cin >> strしてから使用する場合は、事前にgetline(cin, str)呼び出す必要がありますcin.ignore()

string str;
cin >> str;
cin.ignore(); // ignores \n that cin >> str has lefted (if user pressed enter key)
getline(cin, str);

c-string を使用する場合:

char buff[50];
cin.get(buff, 50, ' ');
cin.ignore();
cin.getline(buff, 50);

ADD : あなたの間違いはおそらく関数自体ではなく、関数を呼び出す前です。ストリームは、最初のcin改行文字のみを読み取る必要があります。\n'cin.getline

于 2012-08-29T21:12:30.390 に答える
1

cin.clear();ストリームのエラー ビットをクリアします。保留中のデータは消費されません。

cin.ignore()ストリームからデータを消費するために使用します。

于 2012-08-29T21:23:17.900 に答える
0

usecin.ignore(-1);入力文字列の最初の文字を削除しません

于 2014-04-28T19:38:30.063 に答える
0

何かを読んだ後も、bufor 内に「RETURN」文字が残っているためcin.ignore()、読み取るたびにそれを行う必要があります。

cin.sync()を使用してストリームをクリアすることもできます。実際には clear メソッドはフラグのみをクリアします。

ストリームの最後に移動できるオプションもあります。何も読み取らずに、問題なく書き込む必要があります。

std::cin.seekg(0, std::ios::end);

何を使うかはあなた次第です。

于 2012-08-29T21:18:56.190 に答える