您的位置:首页 > 编程语言 > C语言/C++

c++中的io输入输出

2007-09-03 16:56 351 查看
c++中的io输入输出有好多种,不算使用c语言的输入就有二进制文件的读写

这里不写文件的打开关闭以及定位等操作!

put()
put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。

get()

get()函数比较灵活,有3种常用的重载形式:

一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回

空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。

另一种重载形式的原型是: int get();即非格式化get函数。

这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。

非格式化get函数的功能与提取运算符(>>)很相像,主要的不同点是get函数在读人数据时包括空白字符,而提取运算符在缺省情况下

拒绝接受空白字符。
例 get函数应用举例
#i nclude<iostream.h>
void main()
{
char ch;
while((ch=cin.get())!=EOF)
cout.put(ch);
}
运行时如果输入:
abc xyz 123
则输出:
abc xyz 123


还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='n');这种形式把字符读入由 buf 指向的数组,直到读入

了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'n'。例如:

file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。

当然了更多的时候使用的这种形式:
ifstream &get(char *buf,int num);省略了后面的中止设定字符!

有一点必须明白,就是get这个函数遇到换行中止,但是他并不录入换行符号,而是将其留入输入队列,一般要再在后面补上一个get

函数,比如:
cin.get(name,20).get();//补上一个get用于去掉输入缓冲队列中的换行符号!

读写行:

getline函数

这个函数有类方法和非类方法之分

先看类方法:
ifstream &getline(char *buf,int num);
这么使用
char name[20];
cin.getline(name , 20);

注意了这个函数在输入的时候遇到输入的字符完成或者换行符号中止,但是如果是遇到换行符号中止的时候连带最后的换行符号也录

入,但是他会紧接着就丢弃换行符号,所以用这个符号不用再处理换行符号。

非类的方法就是:
具体的函数格式不晓得!

使用的例子getline(cin,str);其中cin是istream类,str是制定的字符串;
这两个getline可以看下面的例子!

非类方法输入:
string s;
getline( cin, s );
cout << "You entered " << s << endl;

类方法输入:
ifstream fin("tmp.dat");

int MAX_LENGTH = 100;
char line[MAX_LENGTH];

while( fin.getline(line, MAX_LENGTH) ) {
cout << "read line: " << line << endl;
}



读写数据块
要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:

read(unsigned char *buf,int num);
write(const unsigned char *buf,int num);

read()从文件中读取 num 个字符到 buf 指向的缓存中,如果在还未读入 num 个字符时就到了文件尾,可以用成员函数 int

gcount();来取得实际读取的字符数;而 write() 从buf 指向的缓存写 num 个字符到文件中,值得注意的是缓存的类型是 unsigned

char *,有时可能需要类型转换。

例:

unsigned char str1[]="I Love You";
int n[5];
ifstream in("xxx.xxx");
ofstream out("yyy.yyy");
out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
in.close();out.close();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: