标准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.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC语言头文件 IOSTREAM.HC...
使用include <iostream>时一定要加using namespace std
C语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAMC语言头文件 IOSTREAM...
c++ iostream iostream .h 的区别 内容有点少 希望对大家有帮助
头文件iostream 与iostream.h区别
C++ solution is a set of classes defined in the iostream and fstream header files.
输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构,作为一个c++的标准库组件提供给程序员使用。 iostream为内置...
C++Iostream的实例
下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。 #include <iostream.h> int main() { int *p; *pInt = 9; cout *p; return 0; } 解: 指针 p 没有初始化,也就是没有指向某个确定的内存单元,它指向...
IOSTREAM.H文件VS2003后没的
是iostream库的详细介绍,很值得一看
解决部分源文件无法打开的问题,在VS2015的环境下,部分源文件无法打开,可能是源文件库中的源文件缺失了.h后缀,从程序的安装路径中找到文集库,给对应的源文件加上后缀就可以了
vc++2008编译不了#include<iostream.h>头文件
c++中<iostream>库的底层实现 c++中<iostream>库的底层实现 c++中<iostream>库的底层实现 c++中<iostream>库的底层实现 c++中<iostream>库的底层实现 c++中<iostream>库的底层实现 c++中<iostream>库的底层实现 c++...
Android IOStream实例操作源代码,针对IO流操作与学习android的初级编程者共勉。
#include <iostream> #include using namespace std; int main() { int n,i,k=0; cin>>n; for(i=n*n;i>=1;i--) { cout(5); k++; if(k%n==0) cout; } cout; return 0;
相信有很多人都会被C++中各种各样奇怪的输入输出方式搞得晕头转向,这是一本总结得很好的电子书,相信对你很有帮助
IOStream
C++中iostream.h和iostream的区别共3页.pdf.zip
据说从 Visual C++ .NET 2003 开始,移除了旧的 iostream 库。其实编译器制造商不会停止对客户现有软件提供支持,所以在可以预计的将来,旧的C++头文件还会嚣张一段时间。如果能明白字符串头文件的使用,举一反三,...