今天写了点垃圾代码,如下:
<span style="white-space:pre"> </span>fstream ifile;
string thestr;
stringstream strstream;
int ele;
string waste;
ifile.open(argv[i]);
getline(ifile,thestr);
strstream << thestr;
while (strstream >> ele){
allelement[i - 1].element.push_back(ele);// allelement 是个struct*的deque,element是struct里面包含的depue
}
getline(ifile, thestr);
strstream.str(thestr);
strstream >> waste >> allelement[i - 1].priority;
ifile.close();
运行之后,发现waste和 allelement[i - 1].priority 这两个变量并没有成功写入。
经过一番分析后发现,原来在用getline写入thestr,然后用thestr写入strstream时,源文件(ifile)中的\n是会被一起写入的,而在strstream>>ele的时候,\n并不会被写入。
所以当我继续将strstream输入到waste的时候,由于存储的第一个字符为\n, 所以waste为空,从而导致allelement[i - 1].priority也无法被写入成功。
总之,重复利用strstream的时候,请务必及时使用strstream.clear()清空存储的东西,以保证输入正确。