2017-11-01 22 views
-3

私は非常に単純にテキストの行を読み上げるべきですが、何らかの理由でそれは空白を読み込みます。私はreadlineをcin >>行に変更しようとしましたが、それはうまくいきました。しかし、readline(cin、string)はそうではありません。getline(cin、STRING)は空白を読み込んでいます

void AddRestaurant() { 
    string restToAdd; 
    cout << "What is the name of the restaurant you want to add?" << endl; 
    getline(cin, restToAdd); 
    restuarants.push_back(restToAdd); 
    cout << restToAdd + " has been added" << endl << endl; 
} 

誰かが私のエラーを参照してくださいか?

+2

いいえ、実際はありません。 – DimChtz

+1

getline(readlineではなく)が実際に何かを読み取っているかどうかはチェックしません。さまざまな理由ですべてが失敗する可能性があるため、読み取りを行うすべての関数の戻り値をチェックする必要があります。 –

+2

はい、あなたのエラーは非常に明白です:stackoverflow.comの[help]で説明されているように、あなたの質問は[mcve]のすべての要件を満たしていません。それはあなたの問題だ。 –

答えて

1

ではありません。以前はcin>>の操作を行ったようです。 cin>>は、ストリームからわずか文字列を取り、\ngetline()残す、おそらくピックアップし、あなたがそのデフォルトの区切り文字を知っているように、それだけで入力をスキップしては、\nです。

ソリューション --->任意の浮遊\nの入力ストリームをクリアするために、すべてのgetline()操作の前cin.ignore()を使用。

あなたの呼び出しが可能:

std::cin.ignore(); 
std::getline (cin, restToAdd); 

の代わりに: "?誰が私のエラーを参照してください"

std::getline (cin,restToAdd); 
+0

Itストリームの行末を残した '' 'の後に' ignore'を置く方がしばしばです。 2つの理由:修正は問題の原因に近いので、コードを読み込むときに視覚的に結びつきやすくなり、誰かが「AddRestaurant」を呼び出してストリームの終わりがない場合、最初のレストランの名前の1バイトが破棄されました。 – user4581301

関連する問題