我想在名爲trajectory.txt
一個簡單的文件(以下簡化的)看起來像這樣的閱讀下破壞:字符串流只適用於一條線,然後再利用
true true false
2
我的代碼很簡單,讀取和存儲前兩行在一些變量中。
#include <string>
#include <fstream>
#include <sstream>
#include <iostream>
int main(int argc, char** argv)
{
int num_waypoints=0;
bool pos=1, vel=0, acc=0;
std::ifstream file;
std::string filename = "trajectory.txt";
file.open(filename.c_str());
std::string line;
// Read first 2 lines
if (std::getline(file, line)) {
//sstream for each line
std::stringstream ss(line);
//first line
std::string pos_str, vel_str, acc_str;
ss >> pos_str >> vel_str >> acc_str;
//evaluate
(pos_str == "true" ? pos = true : pos = false);
(vel_str == "true" ? vel = true : vel = false);
(acc_str == "true" ? acc = true : acc = false);
//second line
if (std::getline(file, line)) { //GDB confirms, line == "2"
std::string num_waypoints_str;
ss >> num_waypoints_str; //THIS DOES NOTHING?
num_waypoints = stoi(num_waypoints_str);
}
} //main()
的問題是,在倒數第二行,num_waypoints_str
留空,stringstream的假設中的值讀取後。
使用GDB我能夠確認stringstream實際上取值爲「2」,但它似乎有問題將值指向num_waypoints_str。
我因此只能有兩個問題:
- 爲什麼會stringstream的不能通過它的值的字符串? (是否有是一個新的範圍內做)
- 可我的代碼可以簡化爲直接從stringstream的輸入線1至布爾
pos
或者我必須從字符串pos_str
轉換爲pos
通過評估字符串的值。
我正在編譯通過g++ -g -std=c++11 main.cpp -o main
。請嘗試重複我的問題。我覺得我缺少一些簡單的東西。
「GDB確認,行==」2「」,但是「行!= ss」。流'ss'包含你傳遞給構造器的那一行,你讀了它的第一行,但是之後你不改變'ss'的內容,但期望它包含更多的行(你通過getline讀取,但是而不是'ss') – user463035818
如果你想讓'ss'包含新行,你必須把它賦給它:'ss.str(line)'。它不會讀你的思想並複製自己。 – spectras