文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>C++风格的文件输入输出流

C++风格的文件输入输出流

时间:2010-11-23  来源:teiller2008

[NextPage]


    sstr>>str;  
    cout<<str<<endl;  
//--------string转char[]--------  
    sstr.clear();//如果你想通过使用同一stringstream对象实现多种类型的转换,请注意在每一次转换之后都必须调用clear()
成员函数。  
    string name = \"colinguan\";  
    char cname[200];   [Page]
    sstr<<name;  
    sstr>>cname;  
    cout<<cname;  
    system(\"pause\");  
}

接下来我们来学习一下输入/输出的状态标志的相关知识,C++中负责的输入/输出的系统包括了关于每一个输入/输出操作的结果的
记录信息。这些当前的状态信息被包含在io_state类型的对象中。io_state是一个枚举类型(就像open_mode一样),以下便是它包
含的值。 
goodbit 无错误 
Eofbit 已到达文件尾 
failbit 非致命的输入/输出错误,可挽回 
badbit 致命的输入/输出错误,无法挽回 
有两种方法可以获得输入/输出的状态信息。一种方法是通过调用rdstate()函数,它将返回当前状态的错误标记。例如,假如没有
任何错误,则rdstate()会返回goodbit. 
  下例示例,表示出了rdstate()的用法:
   
  
#include <iostream>  
using namespace std;  
  
int main()   
{  
    int a;  
    cin>>a;  
    cout<<cin.rdstate()<<endl;  
    if(cin.rdstate() == ios::goodbit)  
    {  
        cout<<\"输入数据的类型正确,无错误!\"<<endl;  
    }  
    if(cin.rdstate() == ios_base::failbit)  
    {  
        cout<<\"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!\"<<endl;  
    }  
    system(\"pause\");  
}
  另一种方法则是使用下面任何一个函数来检测相应的输入/输出状态:
bool bad(); 
bool eof(); 
bool fail(); 
bool good(); 
  下例示例,表示出了上面各成员函数的用法:
  
  
#include <iostream>  
using namespace std;  
  
int main()   
{  
    int a;  
    cin>>a;  
    cout<<cin.rdstate()<<endl;  
    if(cin.good())  
    {  
        cout<<\"输入数据的类型正确,无错误!\"<<endl;   [Page]
    }  
    if(cin.fail())  
    {  
        cout<<\"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!\"<<endl;  
    }  
    system(\"pause\");  
}
  如果错误发生,那么流状态既被标记为错误,你必须清除这些错误状态,以使你的程序能正确适当地继续运行。要清除错误状
态,需使用clear()函数。此函数带一个参数,它是你将要设为当前状态的标志值。,只要将ios::goodbit作为实参。 
  示例代码如下:
 
  
#include <iostream>  
using namespace std;  
  
int main()   
{  
    int a;  
    cin>>a;  
    cout<<cin.rdstate()<<endl;  
    cin.clear(ios::goodbit);  
    cout<<cin.rdstate()<<endl;  
    system(\"pause\");  
}
通常当我们发现输入有错又需要改正的时候,使用clear()更改标记为正确后,同时也需要使用get()成员函数清除输入缓冲区,以
达到重复输入的目的。 
  示例代码如下:
  
#include <iostream>  
using namespace std;  
  
int main()   
{  
    int a;  
    while(1)  //也可以写成for(;1;)
    {  
        cin>>a;  
        if(!cin)//条件可改写为cin.fail()  

[NextPage]


        {  
            cout<<\"输入有错!请重新输入\"<<endl;  
            cin.clear();  
            cin.get();  
        }  
        else  
        {  
            cout<<a;  
            break;   [Page]
        }  
    }  
    system(\"pause\");  
}
  最后再给出一个对文件流错误标记处理的例子,巩固学习,代码如下:

#include <iostream>  
#include <fstream>  
using namespace std;  
  
int main()   
{  
    ifstream myfile(\"c:\\\\1.txt\",ios_base::in,0);  
    if(myfile.fail())  
    {  
        cout<<\"文件读取失败或指定文件不存在!\"<<endl;  
    }  
    else  
    {  
        char ch;  
        while(myfile.get(ch))  
        {  
            cout<<ch;  
        }  
        if(myfile.eof())  
        {  
            cout<<\"文件内容已经全部读完\"<<endl;  
        }  
        while(myfile.get(ch))  
        {  
            cout<<ch;  
        }  
    }  
    system(\"pause\");  
}

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载