stringstream string转换成long型遇到的问题
2016-07-13 18:18
281 查看
程序目的是从键盘的数字保存为long型,为了防止非法输入,现将输入保存为string类型,在使用stringstream类转换为 long型,屏蔽非法输入带来的问题。
问题:需要多次调用stringstream的对象,对象在使用过一次后再次使用时会出现异常,需要对缓存清空。
解决方法 :
当输入完成后,数据已字符串的形式保存在ss的缓存中,如下图:
然后ss流输出转换后的结果保存在long 型的input变量中,这个过程如同读档案一般,串流已经读到结尾EOF,这个标志不是要输出的long类型,因此判定为error flag,ss终止操作。
4356 EOF
——^
要想继续使用ss,此时需要调用clear()函数重置标志位。注意!clear()不是清空缓存,而是重置标志位。重置错误标志位后,ss可以再次输入。
但是,我们会发现如下的问题,ss的缓存会越来越大。如下图所示:
这是因为,之前的输入保存在了缓存之中, 需要清除。注意,第3次输入结尾有一个负号,在转换为long型时,是错误数据类型,被留在了缓存中, 应该删去,但是在第4次输入时却作为了负号出现在了输出数据中。缓存空间也越来越大。
此时,调用ss.str(“”);清空缓存即可。
正确运行结果就不贴了。
问题:需要多次调用stringstream的对象,对象在使用过一次后再次使用时会出现异常,需要对缓存清空。
#include "stdafx.h" #include <iostream> #include <string> #include <sstream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { prime uPrime; long input; stringstream ss; string inputs; while (true) { cin >> inputs; ss<<inputs; ss >> input; cout <<"inputs:"<< inputs<<endl; cout << "input:" << input<<endl; cout << "Size of stream = " << ss.str().length() << endl; //ss.str(""); //ss 清空缓存操作 ss.clear(); //重置标志位 cout <<endl<<"---------------"<< endl; } return 0; }
解决方法 :
ss.str(""); ss.clear();
当输入完成后,数据已字符串的形式保存在ss的缓存中,如下图:
然后ss流输出转换后的结果保存在long 型的input变量中,这个过程如同读档案一般,串流已经读到结尾EOF,这个标志不是要输出的long类型,因此判定为error flag,ss终止操作。
4356 EOF
——^
要想继续使用ss,此时需要调用clear()函数重置标志位。注意!clear()不是清空缓存,而是重置标志位。重置错误标志位后,ss可以再次输入。
但是,我们会发现如下的问题,ss的缓存会越来越大。如下图所示:
这是因为,之前的输入保存在了缓存之中, 需要清除。注意,第3次输入结尾有一个负号,在转换为long型时,是错误数据类型,被留在了缓存中, 应该删去,但是在第4次输入时却作为了负号出现在了输出数据中。缓存空间也越来越大。
此时,调用ss.str(“”);清空缓存即可。
正确运行结果就不贴了。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- 页面缓存:内存和文件之间的那些事
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的异常处理代码编写示例
- Ruby中的String对象学习笔记
- Redis02 使用Redis数据库(String类型)全面解析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- 浅析SQL Server中的执行计划缓存(上)
- PostgreSQL ERROR: invalid escape string 解决办法
- Enterprise Library for .NET Framework 2.0缓存使用实例