C++ stringstream返回额外的字符?

Chr*_*ris 2 c++ string stream sstream

我一直在尝试使用C++ stringstream类来做一些相对简单的字符串操作,但是我遇到了get()方法的问题.出于某种原因,每当我按字符提取输出字符时,它会附加最后一个字母的第二个副本.

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

int main() {
   stringstream ss("hello");
   char c;

   while(!ss.eof()) {
      ss.get(c);
      cout << "char: " << c << endl;
   }
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序的输出是:

char: h
char: e
char: l
char: l
char: o
char: o
Run Code Online (Sandbox Code Playgroud)

任何帮助,你可以给我这个将不胜感激.

sth*_*sth 8

在流的末尾ss.eof()还不知道将很快到达流的结尾,但是后面的字符提取失败.由于提取失败,因为到达了流的末尾,c因此不会更改.您的程序无法识别ss.get(c)失败并c再次打印旧值.

检查是否仍有可从流中读取的字符的更好方法是这样的循环:

while (ss.get(c)) {
   cout << "char: " << c << endl;
}
Run Code Online (Sandbox Code Playgroud)