`
java-mans
  • 浏览: 11439289 次
文章分类
社区版块
存档分类
最新评论

iostream使用时注意事项

 
阅读更多

标准IO库在3个头文件中定义:iostream是从流中读写,fstream是从文件的读写,而sstream是从字符串中去读写。

IO对象有一个很重要的特点,就是不能复制或者赋值。这意味两点:第一,IO对象不能储存在容器中,第二,形参或者函数的返回值也不能是IO类型。如果需要传递IO对象,则需要使用引用。
IO操作有可能是正确的,也有可能是错误的。错误的IO操作将会导致严重的后果,因此IO可定义了一些IO状态和一些函数来判断IO的状态。举一个例子:

	int ival;
	while(cin>>ival)
		cout<<ival<<"\t";


这段代码看起来似乎没有什么问题,但是如果在输入时并没有按照要求输入整形,而输入的是字符型,那么就会产生一个错误的状态。这个流就无法使用了。
怎么改进这个问题呢?先看一个函数:

#include <iostream>

std::istream& get(std::istream& in)
{
	int ival;
	//遇到结束符之前一直读入数据
	//逗号表达式导致不判断读入是否有误,只关心是否读到结束符
	while(in>>ival, !in.eof())
	{
		//判断流是否有效
		//系统及故障
		if(in.bad())
			throw std::runtime_error("IO stream corrupted!");
		//可恢复故障
		if(in.fail())
		{
			//提示用户输入错误
			std::cerr<<"bad data, try agian";
			//恢复流
			in.clear();
			//跳过一段数据
			in.ignore(200,' ');
			continue;
		}
		//正常读入时输出这个数据以及空格
		std::cout<<ival<<" ";
	}
	//清除流的标志
	in.clear();
	return in;
}


有了这个函数,我们在主函数中可以调用:

	int dval;
	get(cin);
	//重新使用恢复后的流
	cin>>dval;
	cout<<dval<<endl;


如果输入的数据有误,则会打印提示"bad data, try agian。但是流会被重新置为可以使用的状态。

分享到:
评论

相关推荐

    C语言头文件 IOSTREAM.H

    C语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC...

    使用include <iostream>时一定要加using namespace std

    使用include &lt;iostream&gt;时一定要加using namespace std

    C语言头文件 IOSTREAM

    C语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAM...

    iostream 和 iostream.h的区别

    c++ iostream iostream .h 的区别 内容有点少 希望对大家有帮助

    头文件iostream 与iostream.h区别

    头文件iostream 与iostream.h区别

    c++ iostream 教程 PPT

    C++ solution is a set of classes defined in the iostream and fstream header files.

    详解iostream

    输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用。 iostream为内置...

    C++Iostream的实例

    C++Iostream的实例

    c++易混淆的知识点及注意事项

    下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。 #include &lt;iostream.h&gt; int main() { int *p; *pInt = 9; cout *p; return 0; } 解: 指针 p 没有初始化,也就是没有指向某个确定的内存单元,它指向...

    IOSTREAM.H

    IOSTREAM.H文件VS2003后没的

    C++ iostream

    是iostream库的详细介绍,很值得一看

    iostream.h头文件

    解决部分源文件无法打开的问题,在VS2015的环境下,部分源文件无法打开,可能是源文件库中的源文件缺失了.h后缀,从程序的安装路径中找到文集库,给对应的源文件加上后缀就可以了

    vc++2008编译不了#include头文件

    vc++2008编译不了#include&lt;iostream.h&gt;头文件

    c++中<iostream>库的底层实现

    c++中&lt;iostream&gt;库的底层实现 c++中&lt;iostream&gt;库的底层实现 c++中&lt;iostream&gt;库的底层实现 c++中&lt;iostream&gt;库的底层实现 c++中&lt;iostream&gt;库的底层实现 c++中&lt;iostream&gt;库的底层实现 c++中&lt;iostream&gt;库的底层实现 c++...

    Android IOStream实例操作源代码.rar

    Android IOStream实例操作源代码,针对IO流操作与学习android的初级编程者共勉。

    #include <iostream>

    #include &lt;iostream&gt; #include using namespace std; int main() { int n,i,k=0; cin&gt;&gt;n; for(i=n*n;i&gt;=1;i--) { cout(5); k++; if(k%n==0) cout; } cout; return 0;

    iostream 输入输出流

    相信有很多人都会被C++中各种各样奇怪的输入输出方式搞得晕头转向,这是一本总结得很好的电子书,相信对你很有帮助

    IOStream

    IOStream

    C++中iostream.h和iostream的区别共3页

    C++中iostream.h和iostream的区别共3页.pdf.zip

    iostream与iostream.h的区别详细解析

    据说从 Visual C++ .NET 2003 开始,移除了旧的 iostream 库。其实编译器制造商不会停止对客户现有软件提供支持,所以在可以预计的将来,旧的C++头文件还会嚣张一段时间。如果能明白字符串头文件的使用,举一反三,...

Global site tag (gtag.js) - Google Analytics