したがって、最初の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
}
_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文字列を使用する場合:
_char buff[50];
cin.get(buff, 50, ' ');
cin.ignore();
cin.getline(buff, 50);
_
[〜#〜] add [〜#〜]:あなたの間違いはおそらく関数自体にあるのではなく、before関数を呼び出します。ストリームcin
は、最初の_\n'
_の改行文字_cin.getline
_のみを読み取る必要があります。
cin.clear();
はストリーム上のエラービットをクリアします-保留中の可能性のあるデータを消費しません。
cin.ignore()
を使用して、ストリームからのデータを消費します。
何かを読んだ後も、bufor内に「RETURN」文字が残っているため、読み取るたびにcin.ignore()
する必要があります。
cin.sync()
を使用してストリームをクリアすることもできます。実際にclearメソッドはフラグをクリアするだけです。
ストリームの最後に移動できるオプションもあります。読み取りに何も残さずに、問題なく書き込む必要があります。
std::cin.seekg(0, std::ios::end);
何を使うかはあなた次第です。
use cin.ignore(-1);
入力文字列の最初の文字は削除されません