第九章 C++语言的I/O流库
C++语言的输入输出操作虽然没有直接定义,但通过I/O流库提供了强大的支持。在C++程序中,数据可以从键盘输入到程序中,也可以从程序输出到屏幕或磁盘文件中。流在C++中是一个数据从一个位置流向另一个位置的抽象。流的操作包括提取操作和插入操作,分别用于从流中获取数据和向流中添加数据。
9.1 屏幕输出
屏幕输出是C++程序中最常见的操作之一,下面介绍几种常用的屏幕输出方法。
9.1.1 使用预定义的插入符
最常用的屏幕输出方法是将插入符作用在标准输出流类对象 cout
上。
示例:使用预定义的插入符进行屏幕输出
#include <iostream>
#include <cstring>
using namespace std;
int main() {
cout << "The length of \"this is a string\" is:\t" << strlen("this is a string") << endl;
cout << "The size of \"this is a string\" is:\t" << sizeof("this is a string") << endl;
return 0;
}
输出结果:
The length of "this is a string" is: 16
The size of "this is a string" is: 17
这个例子展示了如何使用插入符将字符串的长度和大小输出到屏幕。
9.1.2 使用成员函数 put()
输出一个字符
成员函数 put()
提供了一种将字符送进输出流的方法。
示例:使用 put()
输出字符
#include <iostream>
using namespace std;
int main() {
cout << 'a' << ',' << 'b' << '\n';
cout.put('a').put(',').put('b').put('\n');
char c1 = 'A', c2 = 'B';
cout.put(c1).put(c2).put('\n');
return 0;
}
输出结果:
a,b
a,b
AB
这个例子展示了使用插入符和 put()
函数输出字符的方法。
9.1.3 使用成员函数 write()
输出一个字符串
成员函数 write()
提供了一种将字符串送到输出流的方法。
示例:使用 write()
输出字符串
#include <iostream>
#include <cstring>
using namespace std;
void PrintString(char *s) {
cout.write(s, strlen(s)).put('\n');
cout.write(s, 6) << "\n";
}
int main() {
char str[] = "I love C++";
cout << "The string is: " << str << endl;
PrintString(str);
PrintString("this is a string");
return 0;
}
输出结果:
The string is: I love C++
I love C++
I love
this i
this i
这个例子展示了 write()
函数可以输出整个字符串或部分字符串的功能。
继承结构和流类
C++语言提供了一个继承结构来描述流的行为,见图9-1。ios
类提供了一些关于对流状态进行设置的功能,它是一个虚基类。istream
类提供了从流中提取数据的操作,ostream
类提供了向流中插入数据的操作,iostream
类综合了 istream
和 ostream
类的行为。
文件操作的流类
为了实现对文件的操作,C++语言I/O流库派生定义了5个类:
fstreambase
:公共基类,文件操作中不直接使用。ifstream
:从istream
派生,用于文件的提取操作。ofstream
:从ostream
派生,用于文件的插入操作。fstream
:从fstreambase
和iostream
派生,既可以进行文件的提取也可以进行插入操作。filebuf
:从streambuf
派生,用于缓冲支持。
内部初始化字符序列的类
I/O流库还提供了处理内部初始化字符序列的两个类:
istrstream
:从istream
派生,用于从字符序列中取字符。ostrstream
:从ostream
派生,用于将字符放入字符序列中。
预定义流对象
系统预定义了四个流对象供用户使用:
cin
:istream
类对象,用于标准输入(键盘输入)。cout
:ostream
类对象,用于标准输出(屏幕输出)。cerr
:ostream
类对象,用于标准出错信息输出(无缓冲区)。clog
:ostream
类对象,用于标准出错信息输出(带缓冲区)。
2024/6/29日补充
在编译原理课程设计的时候写文件读写模块忘了C++文件读写的各个库函数和类和函数,暴露了本人这个模块的不足。
结论
C++ I/O流库提供了灵活且强大的输入输出功能,通过流的抽象,使得数据的输入输出操作变得简洁高效。无论是对屏幕、键盘的操作,还是对文件的操作,C++ I/O流库都能很好地满足需求。希望本文对C++ I/O流库的理解有所帮助,为编写高效的C++程序提供支持。