Stringstream C++; 我刚刚读了C++中的StrugSuffic,并实现了一个简单的程序。 #include <iostream> #include <sstream> using namespace std; int main() { int num; stringstream sso; string str; //integer to string cin >> num; sso << num; sso >> str; cout << "String form of number : " << str << endl; //string to integer cin >> str; sso << str; sso >> num; //num still has value from previous integer to string???? cout << "Integer form of string (+2) :" << (num + 2) << endl; return 0; }
由于Stringstream C++; 我刚刚读了C++中的StrugSuffic,并实现了一个简单的程序。 #include <iostream> #include <sstream> using namespace std; int main() { int num; stringstream sso; string str; //integer to string cin >> num; sso << num; sso >> str; cout << "String form of number : " << str << endl; //string to integer cin >> str; sso << str; sso >> num; //num still has value from previous integer to string???? cout << "Integer form of string (+2) :" << (num + 2) << endl; return 0; },c++,stringstream,C++,Stringstream,由于num没有得到更新,并且仍然保留以前计算的旧值,因此我得到的输出不正确。我犯了什么愚蠢的错误?在第一次输入操作之后,stringstream将设置其EOF位。这一位是粘性的,也就是说,它不会因为向解析添加更多输入而被擦除。一般来说,在读取数据时,还应验证读取是否成功。对于流,您可以使用以下方法检查流状态: if(!(istream >> value)) throw runtime_error("reading failed"); 我很确定您的第二次输入操作失败了,此时该值将保留
num
没有得到更新,并且仍然保留以前计算的旧值,因此我得到的输出不正确。我犯了什么愚蠢的错误?在第一次输入操作之后,stringstream将设置其EOF位。这一位是粘性的,也就是说,它不会因为向解析添加更多输入而被擦除。一般来说,在读取数据时,还应验证读取是否成功。对于流,您可以使用以下方法检查流状态:
if(!(istream >> value)) throw runtime_error("reading failed");
我很确定您的第二次输入操作失败了,此时该值将保留以前的值。您应该在使用之间清除stringstream,因为eofbit已在第一次使用期间设置:
sso.clear();
sso.str("");
谢谢成功了。但是当我做了
sso@InsaneCoder时,我认为它应该失败,只保留以前的值(12)是的,它失败了。我根据@Ulrich的回答进行了检查,并确认了这一点。谢谢Jerome和Ulrich
sso.clear();
sso.str("");