📄 chapter11.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<style type="text/css">
<!--
.style1 {
font-size: 16px;
font-weight: bold;
font-style: italic;
color: #FF0000;
}
.style2 {font-size: 14px}
-->
</style>
</head>
<body>
<p><span
class=style1> 第 十一 章 流类库与输入/输出</span><br>
</p>
<p> <span class="style2"><strong>11-1 什么叫做流?流的提取和插入是指什么?I/O流在C++中起着怎样的作用?</strong><br>
</span></span></p>
<p class="style2"> 解: <br>
流是一种抽象,它负责在数据的生产者和数据的消费者之间建立联系,并管理数据的流动,一般意义下的读操作在流数据抽象中被称为(从流中)提取,写操作被称为(向流中)插入。操作系统是将键盘、屏幕、打印机和通信端口作为扩充文件来处理的,I/O流类就是用来与这些扩充文件进行交互,实现数据的输入与输出。<br>
</span></p>
<p class="style2"> <strong>11-2 cerr和clog有何区别?</strong><br>
</span></p>
<p class="style2"> 解: <br>
cerr 标准错误输出,没有缓冲,发送给它的内容立即被输出,适用于立即向屏幕输出的错误信息;clog 类似于cerr,但是有缓冲,缓冲区满时被输出,在向磁盘输出时效率更高。<br>
</span></p>
<p class="style2"> <strong>11-3 使用I/O流以文本方式建立一个文件test1.txt,写入字符“已成功写入文件!”,用其它字处理程序(例如windows的记事本程序Notepad)打开,看看是否正确写入。</strong><br>
</span></p>
<p class="style2"> 解: <br>
#include <fstream.h> </span></p>
<p class=g style2>void main() <br>
{<br>
ofstream file1("test.txt");<br>
file1 << "已成功写入文件!";<br>
file1.close();<br>
}</p>
<p class=g style2>程序运行后test1.txt的内容为:已成功写入文件!<br>
</p>
<p class=g style2><strong>11-4 使用I/O流以文本方式打开上一题建立的文件test1.txt,读出其内容显示出来,看看是否正确。</strong><br>
</p>
<p class=g style2>解: <br>
#include <fstream.h></p>
<p class=g style2>void main() <br>
{<br>
char ch;<br>
ifstream file2("test.txt");<br>
while (file2.get(ch))<br>
cout << ch;<br>
file2.close();<br>
}</p>
<p class=g style2>程序运行输出:<br>
已成功写入文件!<br>
</p>
<p class=g style2><strong>11-5 使用I/O流以文本方式打开上题建立的文件test1.txt,在次此文件后面添加字符“已成功添加字符!”,然后读出整个文件的内容显示出来,看看是否正确。</strong><br>
</p>
<p class=g style2>解: <br>
#include <fstream.h></p>
<p class=g style2>void main() <br>
{<br>
ofstream file1("test.txt",ios::app);<br>
file1 << "已成功添加字符!";<br>
file1.close ();<br>
char ch;<br>
ifstream file2("test.txt");<br>
while (file2.get(ch))<br>
cout << ch;<br>
file2.close();</p>
<p class=g style2>}</p>
<p class=g style2>程序运行输出:<br>
已成功写入文件!已成功添加字符!<br>
</p>
<p class=g style2><strong>11-6 定义一个dog类,包含体重和年龄两个成员变量及相应的成员函数,声明一个实例dog1,体重为5,年龄为10,使用I/O流把dog1的状态写入磁盘文件,再声明另一个实例dog2,通过读文件把dog1的状态赋给dog2。分别使用文本方式和二进制方式操作文件,看看结果有何不同;再看看磁盘文件的ASCII码有何不同。</strong><br>
</p>
<p class=g style2>解: <br>
以两种方式操作,程序运行结果一样,但磁盘文件的ASCII码不同,使用二进制方式时,磁盘文件的ASCII码为05 00 00 00 0A 00 00 00,使用文本方式时,磁盘文件的ASCII码为05 00 00 00 0D 0A 00 00 00,这是因为此时系统自动把0A转换为了0D 0A。<br>
#include <fstream.h></p>
<p class=g style2>class dog<br>
{<br>
public:<br>
dog(int weight, long days):itsWeight(weight),<br>
itsNumberDaysAlive(days){}<br>
~dog(){}<br>
<br>
int GetWeight()const { return itsWeight; }<br>
void SetWeight(int weight) { itsWeight = weight; }<br>
<br>
long GetDaysAlive()const { return itsNumberDaysAlive; }<br>
void SetDaysAlive(long days) { itsNumberDaysAlive = days; }<br>
<br>
private:<br>
int itsWeight;<br>
long itsNumberDaysAlive;<br>
};</p>
<p class=g style2>int main() // returns 1 on error<br>
{<br>
char fileName[80];<br>
<br>
cout << "Please enter the file name: ";<br>
cin >> fileName;<br>
ofstream fout(fileName);<br>
// ofstream fout(fileName,ios::binary);<br>
if (!fout)<br>
{<br>
cout << "Unable to open " << fileName << " for writing.\n";<br>
return(1);<br>
}<br>
<br>
dog Dog1(5,10);<br>
fout.write((char*) &Dog1,sizeof Dog1);<br>
<br>
fout.close();</p>
<p class=g style2>ifstream fin(fileName);<br>
// ifstream fin(fileName,ios::binary);<br>
if (!fin)<br>
{<br>
cout << "Unable to open " << fileName << " for reading.\n";<br>
return(1);<br>
}<br>
<br>
dog Dog2(2,2);<br>
<br>
cout << "Dog2 weight: " << Dog2.GetWeight() << endl;<br>
cout << "Dog2 days: " << Dog2.GetDaysAlive() << endl;<br>
<br>
fin.read((char*) &Dog2, sizeof Dog2);<br>
<br>
cout << "Dog2 weight: " << Dog2.GetWeight() << endl;<br>
cout << "Dog2 days: " << Dog2.GetDaysAlive() << endl;<br>
fin.close();<br>
return 0;<br>
}</p>
<p class=g style2>程序运行输出:<br>
Please enter the file name: a<br>
Dog2 weight: 2<br>
Dog2 days: 2<br>
Dog2 weight: 5<br>
Dog2 days: 10<br>
</p>
<p class=g style2><strong>11-7 观察下面的程序,说明每条语句的作用,看看程序执行的结果。<br>
#include <iostream><br>
using namespace ::std;</strong></p>
<p class=g style2><strong>void main()<br>
{<br>
ios_base::fmtflags original_flags = cout.flags(); //1 <br>
cout<< 812<<'|';<br>
cout.setf(ios_base::left,ios_base::adjustfield); //2<br>
cout.width(10); //3<br>
cout<< 813 << 815 << '\n';<br>
cout.unsetf(ios_base::adjustfield); //4<br>
cout.precision(2);<br>
cout.setf(ios_base::uppercase|ios_base::scientific); //5<br>
cout << 831.0 ;<br>
<br>
cout.flags(original_flags); //6<br>
}</strong><br>
</p>
<p class=g style2>解: <br>
//1保存现在的格式化参数设置,以便将来恢复这些设置;<br>
//2 把对齐方式由缺省的右对齐改为左对齐;<br>
//3 把输出域的宽度由缺省值0改为10;<br>
//4 清除对齐方式的设置;<br>
//5 更改浮点数的显示设置;<br>
//6 恢复原来的格式化参数设置。</p>
<p class=g style2>程序运行输出:<br>
812|813 815<br>
8.31E+02<br>
</p>
<p class=g style2><strong>11-8 提示用户输入一个十进制整数,分别用十进制、八进制和十六进制形式输出。</strong><br>
</p>
<p class=g style2>解: <br>
#include <iostream.h></p>
<p class=g style2>void main() {<br>
int n;<br>
cout << "请输入一个十进制整数:";<br>
cin >> n;<br>
cout << "这个数的十进制形式为:" << dec << n << endl;<br>
cout << "这个数的八进制形式为:" << oct << n << endl;<br>
cout << "这个数的十六进制形式为:" << hex << n << endl;<br>
} </p>
<p
class=g style2>程序运行输出:<br>
请输入一个十进制整数:15<br>
这个数的十进制形式为:15<br>
这个数的八进制形式为:17<br>
这个数的十六进制形式为:f<br>
</p>
<p class=g style2><strong>11-9 编写程序实现如下功能:打开指定的一个文本文件,在每一行前加行号。</strong><br>
</p>
<p class=g style2>解: <br>
//b.cpp<br>
#include <fstream.h><br>
#include <strstrea.h><br>
#include <stdlib.h></p>
<p class=g style2>void main(int argc, char* argv[])<br>
{<br>
<br>
strstream textfile;<br>
{<br>
ifstream in(argv[1]);<br>
textfile << in.rdbuf();<br>
}<br>
ofstream out(argv[1]); <br>
<br>
const int bsz = 100;<br>
char buf[bsz];<br>
int line = 0;<br>
while(textfile.getline(buf, bsz)) {<br>
out.setf(ios::right, ios::adjustfield);<br>
out.width(1);<br>
out << ++line << ". " << buf << endl;<br>
}<br>
}</p>
<p class=g style2>编译后运行程序b text1.txt<br>
运行前text1.txt的内容为:<br>
aaaaaaaaaaaa<br>
bbbbbbbbbbbb<br>
cccccccccccc<br>
dddddddddddd<br>
eeeeeeeeeeee<br>
ffffffffffff<br>
gggggggggggg<br>
hhhhhhhhhhhh</p>
<p class=g style2>运行后text1.txt的内容为:<br>
1. aaaaaaaaaaaa<br>
2. bbbbbbbbbbbb<br>
3. cccccccccccc<br>
4. dddddddddddd<br>
5. eeeeeeeeeeee<br>
6. ffffffffffff<br>
7. gggggggggggg<br>
8. hhhhhhhhhhhh</p>
<p class="style2"> </p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -