作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
while(getline(data, word, '\n')){//seperates by line
ss<<word; // output1: Chicken, for sale, 60
// output2: Microwave, wanted, 100 (and so on)
while(getline(ss, word, ',')){//seperates by individual words + space
// output1: Chicken
// output2: for sale
// output3: 60
if(word[0]==' '){ //removes space in 2 and 3
word.erase(0,1);
}
if(wordindex==0){
board[i].object=word;
wordindex++;
}
else if(wordindex==1){
board[i].type=word;
wordindex++;
}
else if(wordindex==2){
board[i].price=word;
wordindex=0; //resets index to 0 for next line
i++; //moves to next struct in array
}
}
}
第二个 getline 循环只为第一个输入循环一次:chicken, for sale, and 60
并且没有到达第二个。我认为单词索引始终设置为 0
,所以这应该不是问题。此外,第一个 getline()
完全输出所有数据,因此某些东西导致第二个 getline()
混淆。我只是看不出它是什么。
最佳答案
这里
ss<<word;
OP 重用了一个字符串流,该字符串流可能在之前的迭代中一直读到最后,将流设置为无法再写入或读取的错误状态。这可以通过添加
来解决ss.clear();
在循环结束时删除任何坏标志,但通过不断将 mor 数据写入字符串流,它将继续增长,吸收越来越多的内存,除非用类似的东西清空
ss.str(std::string());
将其内部缓冲区设置回空字符串。如果构建和销毁的额外成本对解析速度不是问题,那么每次迭代都创建一个新的 stringstream
可能会更好。
这是一种更简单的内部解析循环方法:
std::stringstream ss(word);
while(i<MAX_ARRAY_SIZE && // prevent overflow
getline(ss, board[i].object, ',') &&
getline(ss, board[i].type, ',') &&
getline(ss, board[i].price, ',')){ // read all three parameters directly into object
//sanitize
if(board[i].type[0]==' '){
board[i].type.erase(0,1);
}
if(board[i].price[0]==' '){
board[i].price.erase(0,1);
}
i++; // next, please
}
关于c++ - 漏洞 : Why does this getline only loop once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41843911/
我是一名优秀的程序员,十分优秀!