gpt4 book ai didi

c++ - 在 C++ 中使用 istringstream 读取输入时出错

转载 作者:行者123 更新时间:2023-11-28 01:15:58 25 4
gpt4 key购买 nike

我必须接受如下输入

3
10 20 30 40 50
60 70 80 90 10
20 30 40 50 60

所以我有下面的代码

class Student {

public:
void input() {
cin.ignore();
string line;
std::getline(std::cin, line);

// build an istringstream with above received line as data source.
std::istringstream iss{ line };
// define vector Marks use range constructor and steam iterator
unsigned int mark = 0;
while (iss >> mark) {
cout << "pushing mark " << mark << endl;
m_vecMarks.push_back(mark);
}
}
private:
vector< unsigned int > m_vecMarks;

};



int main() {
int n; // number of students
cin >> n;
Student* s = new Student[n]; // an array of n students

for (int i = 0; i < n; i++) {
cout << "Enter the input for " << i << endl;
s[i].input();
}
}

在运行上面的代码时,我的输出低于

pushing mark 0
pushing mark 20
pushing mark 30
pushing mark 40
pushing mark 50
pushing mark 0
pushing mark 70
pushing mark 80
pushing mark 90
pushing mark 10
pushing mark 0
pushing mark 30
pushing mark 40
pushing mark 50
pushing mark 60

我的代码中没有错误是什么导致我的行的初始值打印为 0 而不是正确的值,例如在我的情况下它是 10

请帮忙

最佳答案

std::getline 已经阅读并忽略换行符。所以你有 std::ignore 在“错误的”地方。

您只想丢弃 std::cin 输入中留下的换行符.所以删除 ignore来电input()成员函数,而是在 cin 之后添加它调用:

int n; // number of students
cin >> n;
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');

(您需要 <limits> header 。)

关于c++ - 在 C++ 中使用 istringstream 读取输入时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58727125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com