首页 > 代码库 > c++IO之标准设备操作流
c++IO之标准设备操作流
在IO流类库中包含以下几个常用的流类:
ios是抽象基类,类istream和ostream是单继承于ios,而类iostream是通过多继承于类istream和类ostream。ios除了派生出istream和ostream还派生出fstreambase文件流类和strstreambase串流类,而该4类又派生出ifstream、ofstream、istrstream、ostrstream,以及fstream和strstream。
在C++中除了上述提到过的预定义流对象cout和cin外,还有非缓冲标准出错流对象cerr和缓冲标准出错流对象clog,它们都是来自于ostream类的对象,用于输出错信息。cerr和clog之间的不同之处在于cerr是不经过缓冲区直接向显示器输出有关信息,而clog则是先把信息放在缓冲区,缓冲区满后或遇上endl时向显示器输出。下面介绍几个预定义对象cout和cin的几个成员函数:
cout.put(字符变量或单字符);//注:参数可以是字符的ASCII码或整型表达式
cin.get(字符型变量);//注:从输入流中读取一字符(包括空白字符)
cin.getline(字符数组,字符个数,终止标志符);
或
cin.getline(字符指针,字符个数,终止标志符);//注:从输入流中读取n-1个字符,赋值给字符数组或字符指针所指的字符数组,最后插入一个字符串结束标志‘\n‘。如果在读取n-1个字符之前遇到指定的终止符,则提前结束读取,最后插入一个字符串结束标志‘\n‘。
cin.ignore(n,终止符);//注:跳过输入流中n个字符(默认为1),或遇到指定终止符(默认为EOF)时提前结束。
综合上述成员函数举例:
1 #include "stdafx.h" 2 #include <iostream> 3 4 int main() 5 { 6 std::cout<<"cout.put:"<<std::endl; 7 std::cout.put(‘X‘); 8 std::cout.put(‘\n‘); 9 std::cout.put(88);10 std::cout.put(‘\n‘);11 12 std::cout<<"********************************"<<std::endl;13 14 std::cout<<"cin.get:"<<std::endl;15 char ch;16 while(std::cin.get(ch))17 {18 if(ch==‘\n‘)19 {20 std::cout<<std::endl;21 break;22 }23 std::cout.put(ch);24 }25 26 std::cout<<"********************************"<<std::endl;27 28 std::cout<<"cout.getline:"<<std::endl;29 30 char str[10];31 std::cin.getline(str,10,‘t‘);32 std::cout<<str<<std::endl;33 34 std::cout<<"********************************"<<std::endl;35 36 std::cout<<"cout.ignore:"<<std::endl;37 std::cin.ignore(5,‘t‘);38 std::cin>>str;39 40 std::cout<<str<<std::endl;41 42 return0;43 }
这里要注意ignore的使用,它后面一定跟标准输入语句,否则强制等待输入;其实ignore的作用就是对之后输入的内容进行忽略,例如 char str[10];cin.ignore(5,‘q‘);cin>>str;折句话的意思就是要求输入str,共十个字符(包括‘\0‘),但是ignore在这里就会忽略你的前5个字符(如果前五个字符内有q,那忽略q与之前的字符),所以你要输入9个字符+忽略的字符+\0