使用getline函数的奇怪循环行为

时间:2014-08-12 05:19:28

标签: c++ getline

#include <iostream>
#include <string>
#include <set>
using namespace std;    
int main()
{
   int N; //number of bank accounts
   cin >> N;
   int n = 0;
   multiset<string> bank_accounts;
   string account;
   while (n < N)
   {
     getline(cin, account);
     bank_accounts.insert(account);
     n++;
   }        
}

当我输入N = 1时,循环不接受任何输入并且程序退出但是当我使用getline(cin, account)代替cin >> account时,它可以正常工作。我有输入有空格所以我只需要使用getline()但我无法理解这种奇怪的行为。

1 个答案:

答案 0 :(得分:3)

您的cin >> N在缓冲区中留下了一个换行符号(您键入的内容),当您第一次调用getline()时,该符号会立即消失。

您可以在第一个cin.ignore();之前执行getline来忽略此字符。