为何while(getline(...))处理stringstream时无法多次执行?
解决TSV行拆分时stringstream后续循环失效问题
你的问题根源是第一次读取完stringstream后,流的错误状态位(比如eofbit)被置位了。当用getline(lineStream, ...)读完所有片段后,lineStream会进入"已到达末尾"的状态,后续哪怕你用str()更新了流的内容,这个错误状态依然存在,导致getline直接返回false,无法进入循环。
要解决这个问题,只需要在每次给lineStream设置新内容前,先调用clear()方法清除流的错误状态:
for (int i = 0; i < 4; i++) { counter = 0; getline(inputfile, tsvLine); lineStream.clear(); // 先清除流的错误状态 lineStream.str(tsvLine); while(getline(lineStream, currentChunk, '\t')){ cout << "[Part: " << ++counter << "] "; cout << currentChunk << endl; } }
之前你尝试的ignore()或者手动str("")都没用的原因是:
ignore()只是跳过流中的字符,无法清除已经置位的错误状态位str("")只是清空流的内容,但流的状态标记(比如eof)依然保留
内容的提问来源于stack exchange,提问作者Corey P.
相关产品推荐
相关产品推荐

