使用列表 STL 时出错

error using list STL

本文关键字:出错 STL 列表      更新时间:2023-10-16

可能的重复项:
这是 getline() 的错误,还是我做错了什么。使用 getline() 的正确方法?

我试图在 STL 列表和字符串上学习这个主题。因此,作为集成,我尝试了这个程序:

#include<iostream>
#include<list>
#include<string>
using namespace std;
int main(){
    list<string> obj1, obj2;
    string obj;
    int n;
    cout<<"Enter the number of elements in string list 1:t";
    cin>>n;
    cin.clear();
    cout<<"Enter the string:n";
    for( int i=0; i<n; i++){
        getline(cin, obj);
        cout<<"The string is:t"<<obj<<" and i is "<<i<<endl;
        obj1.push_back(obj);
    }
    obj1.sort();
    cout<<"The string in sorted order is:n";
    list<string>::reverse_iterator rit;
    for( rit = obj1.rbegin(); rit != obj1.rend(); rit++)
        cout<<*rit<<endl;
    return 0;
}

我得到以下输出:

Enter the number of elements in string list 1:  4
Enter the string:
The string is:   and i is 0
goat
The string is:  goat and i is 1
boat
The string is:  boat and i is 2
toad
The string is:  toad and i is 3
The string in sorted order is:
toad
goat
boat

程序中的错误是第一个字符串是自动插入到列表中的空白字符串。为了避免这种情况,我尝试使用cin.clear(),但我无法克服错误。任何人都可以识别错误并帮助我找到答案。

在同一

程序中使用 operator>>getline 时必须特别小心。operator>>在输入流中留下一个行尾指示器,getline接受该指示器。

尝试在getline之前添加std::cin.ignore(std::numeric_limits<std::streamsize>::max(), 'n')

cin.clear()不会做你认为它做的事情。查一查。然后按照你在 Rob 的回答中得到的建议。

这是因为输入数字后,换行符仍在缓冲区中,因此第一个getline获得该换行符。最简单的解决方案是在循环之前使用虚拟getline调用。