Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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("");