2016-04-02 5 views
0

私は2つの文字列を取得するために複数のgetline(cin, string)呼び出しを使用しています。ただし、コードは2番目の呼び出しをスキップし、最初の呼び出しのみを処理します。複数のgetline呼び出しを使用して複数の行を読み取る

for (int i = 0; i < 2; ++i) 
{ 
    if (i == 0) 
    { 
     cout << "Please enter string A: " << endl; 
     getline(cin, stringA); 
    } 

    if (i == 1) 
    { 
     cout << "Please enter string B: " << endl; 
     cin.ignore(); 
     getline(cin, stringB); 
    } 
} 

複数のgetline()コールを処理するにはどうすればよいですか?与えられたコードと悪い行動を再現する

enter image description here

答えて

0

できません。バグは他の場所にあるかもしれません。

にかかわらず、コードがずっと簡単にすることができ、それは他の問題を解決することがあります。

cout << "Please enter string A: " << endl; 
getline(cin, stringA); 
cout << "Please enter string B: " << endl; 
cin.ignore(); 
getline(cin, stringB); 

forループは、あなたはパラメータのわずかな違いで同じコードをオーバー繰り返すことによって、重複コードを排除することができます。重複したコードはありませんので、ここでforは何もしません。

cin.ignore()の目的は何ですか。入力の2行目の最初の文字は破棄されます。もしそれがあなたの望むものなら、グルーヴィーでなければ、再考してください。

関連する問題