CPP中的getline和cin

时间:2014-06-28 17:15:42

标签: c++ c++11

我有以下代码,其中cin在getline之前,getline正在捕获新行,因此没有为其变量赋值;代码是

int main(){
    string a,b;
    int n;
    cin>>n;
    getline(cin,a);
    cout<<a;
    return 0;
}

PS:输入No后我按Enter键,程序结束(i..e getline捕获换行符,所以a为null。如果有人可以建议我学习基本I / O概念的资源,那将会很棒在Cpp)

2 个答案:

答案 0 :(得分:4)

当您输入&#34; No&#34;,这不是有效整数时,cin流在cin >> n表达式后处于错误状态。因此,没有其他输入可用,特别是您的getline不会尝试读取一行。

答案 1 :(得分:3)

在调用下一个getline之前,你必须丢弃你输入的新行字符(如果没有,你只需阅读一个新行字符):

int main()
{
    string a,b;
    int n;
    cin>>n;
    cin.ignore (std::numeric_limits<std::streamsize>::max(),'\n'); // <-- Here
    // Or cin >> ws suggested by @0x499602D2
    getline(cin,a);
    cout<<a;
    return 0;
}

备注:

  • 您应该检查每个IO操作的成功/失败,包括cin >> n
  • en.cppreference.com是I / O流文档的良好起点。