我正在尝试使用安全实践来处理仅在C++中使用数字的输入,因此我使用stringstream对象:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
int first, second;
string input;
stringstream sstream;
cout << "First integer: ";
getline(cin, input);
sstream.str(input);
sstream >> first;
cout << first << endl; //display user input in integers
cout << "Second integer: ";
getline(cin, input);
sstream.str(input);
sstream >> second;
cout << second << endl; //display user input in integers
getline(cin, input); //pause program
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然而,第二次它似乎给变量'second'一个任意值.这是输出:
First integer: 1
1
Second integer: 2
2293592
Run Code Online (Sandbox Code Playgroud)
如果我声明两个stringstream对象并分别对它们使用它们,它似乎工作正常.这是否意味着我不能以我正在尝试的方式重用stringstream对象?在我的真实程序中,我打算处理来自用户的两个以上输入值,所以我只想确定是否有另一种方式而不是制作多个stringstream对象.我怀疑这是非常重要的,但我在Windows XP上,我使用MinGW作为我的编译器.
我非常感谢任何帮助.
Jam*_*lis 11
你需要重置状态stringstream.通常,这涉及两个步骤:清除缓冲区:
sstream.str("");
Run Code Online (Sandbox Code Playgroud)
并重置错误状态标志:
sstream.clear();
Run Code Online (Sandbox Code Playgroud)
如果你没有清除缓冲区,如果你得到像"123abc"这样的输入,那么当你下次尝试从它读取时,"abc"仍将在流中.
您还应确保测试stream(sstream.fail())的失败状态以确保提取成功.如果你想确保用户只输入一个整数(即,你想阻止用户输入,比如"123abc",那么你应该测试以确保sstream.eof()是真的.
| 归档时间: |
|
| 查看次数: |
8510 次 |
| 最近记录: |