C++ 程序设计入门(下)- 第 7 单元 - 文件输入和输出

介绍输入输出的类

练习

  1. C++中用于文件输入输出的头文件包括
    • ifstream
    • ofstream
    • stdio
    • fstream
  2. 关于 cin 和 cout 说法正确的有
    • A. cin 与 cout 都是类
    • B. cin 是一个 istream 类的对象
    • C. cout 是一个 ostream 类的对象
    • D. cin 和 cout 都是 ios 类的对象
  3. ifstream 类与 ofstream 类中均有一个 filebuf 类型的对象成员
  4. cin.get() 一次只能读入一个字符
  5. 使用cin对象获取用户输入时,当用户输入字符a然后敲回车键,cin的缓冲区中只有一个字符 a
  6. C语言中用于标准输入和标准输出的文件指针包括
    • A. cin
    • B. cout
    • C. stdin
    • D. stdout
  7. int sprintf( char *buffer, const char *format, [ argument] … );
    函数说法不正确的是:
    • A. 把格式化的数据写入某个字符串中
    • B. sprintf 是个变参函数
    • C. 把格式化的数据直接显示到屏幕上
    • D. 在sprintf函数中,可以像printf函数一样使用格式化控制字符串
  8. 当我们在键盘上输入字符a并且敲回车后,cin的缓冲区中的字符有:
    • A. 字符a(ASCII码97)
    • B. 空格字符(ASCII码32)
    • C. 换行符(ASCII码10)
    • D. 回车符(ASCII码13)

程序员趣事

某程序员退休后决定练习书法,于是重金购买文房四宝。一日,饭后突生雅兴,一番研磨拟纸,并点上上好檀香。定神片刻,泼墨挥毫,郑重地写下一行字:
Hello World!

有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他说:“你知道不知道这个东西会危害你的健康?我是说,你有没有注意到香烟盒上的那个警告(Warning)?”小伙子说:“没事儿,我是一个程序员。”那妇女说:“这又怎样?”程序员说:“我们从来不关心 Warning,我们只关心 Error。”

将数据写入文件

练习

  1. 用ofstream打开文件时,不一定要显式调用 open() 函数
  2. case insensitive 的意思是
    • A. 亲吻一下没感觉
    • B. 小事儿没感觉
    • C. 箱子很差
    • D. 大小写不敏感
  3. 你用过Linux吗?
    • A. 每天都在用,我家里的无线路由器中有嵌入式linux,我的android手机里面有linux,我的肾六手机里面的ios是用freebsd改造的,和linux很像。
    • B. 没用过,因为我很忙,要天天给男/女朋友做饭洗衣
    • C. 没用过,但是我知道可以安装一个虚拟机,在虚拟机里面装个Linux
    • D. 没用过,也不打算用。C++与Linux一毛钱关系都没有
  4. 下列打开scores.txt文件方法正确的是
    • A. ofstream ofs("c:\scores.txt");
    • B. ofstream ofs("c:\\scores.txt");
    • C. ofstream ofs; ofs.open("c:\scores.txt");
    • D. ofstream ofs; ofs.open("c:\\scores.txt");
  5. 关于流插入运算符在写文件时说法正确的有
    • A. 流插入运算符可以自动识别紧跟其后的参数的数据类型并进行自动转换
    • B. 在文件输出操作中,流插入运算符可以与 setw() 等格式控制函数一同使用
    • C. 如果想要使得输出到文件中的信息换行,只能使用 endl
    • D. 如果输出的文件还没有被打开,那么使用流插入运算符时,输出的文件会被自动打开
  6. ofstream类可以从文件中读数据

程序员趣事

换一个电灯泡需要几个 C++ 程序员?你还在用面向过程的思维考虑问题。一个设计良好的电灯泡类必然封装了换灯泡的方法,所以你要做的就是调用“换电灯泡”的方法。

从文件读数据

练习

  1. 这段代码中,可以将
    #include <fstream>
    改为
#include <ifstream>
#include <ofstream>

    1. fail() 函数的功能是让你打不开文件

    1. 正确打开文件读取其内容的代码是
  • A. ifstream ifs();
  • B. ifstream ifs("a.txt");
  • C. ifstream ifs; ifs.open("a.txt");
  • D. ifstream ifs(); ifs.open("a.txt");
    1. 对于代码
string filename("hello.txt");
ifstream ifs(filename);
std::cout << ifs.fail();

若 hello.txt 文件不存在,该代码输出
- 1
5. 若打开文件读取其内容,则读到文件末尾时调用 eof() 函数,该函数返回值为
- true

格式化输出

练习

  1. 对于代码
int a = 10;
float b = 10.001;
cout << setw(4) << a << b << endl;
cout << setfill('0') << a << setw(7) << b;

的输出结果是(答案中用下划线代替空格)
- __1010.0
10_10.001
- __1010.001
10010.001
- 10__10.001
01010.001
- 1010.001__
01010.001
2. setprecision()函数对于整数的显示没有影响
-
3. 在使用流提取运算符读取文本文件的内容时,数据之间可以使用制表符作为分隔。
-

文件的打开模式与测试文件的状态

练习

  1. 下面哪些表达式始终为真
    • A. eof() == (ios::eofbit == 1)
    • B. eof() == (ios::eofbit == 0)
    • C. bad() != (ios::badbit == 0)
    • D. bad() == (ios::badbit != 0)
  2. 打开文件同时进行读写,则文件访问模式的写法应该是
    • ios::in ios::out

二进制读写

练习

  1. 对于代码
#include <fstream>
#include <iostream>

using namespace std;
int main(){
  fstream output("test.dat", ios::out|ios::binary);
  if(output.fail()) {
    cout << "Error opening test.dat" << endl;
    return -1;
  }
  output.write("123", 3);
  output.close(); 

  return 0;
}

以下说法正确的有
- A. test.dat文件中存储的是123这个整数
- B. test.dat文件中存储的是字符’1’, ‘2’, ‘3’的ASCII码
- C. test.dat文件的大小为4个字节
- D. test.dat文件的大小为3个字节
2. 对于代码片段:

#include <fstream>
#include <iostream>
using namespace std;
int main(){
  fstream binaryio; // Create stream object
  // Read array from the file
  binaryio.open("array.dat", ios::in | ios::binary);
  char result[10] = {'\0'};
  binaryio.read(reinterpret_cast<char *>(result), 20);
  cout << result;
  return 0;
}

其中array.dat文件中存放的内容以字节序列表示,各字节的值为 0x30, 0x31, …, 0x60
执行之后可能出现的状况有:
- A. 屏幕上没有输出,程序结束,未报告错误
- B. 屏幕上输出了10个以上字符,程序结束,未报告错误
- C. 屏幕上输出了10个以上字符,程序出错
- D. 屏幕上输出了9个字符,然后程序报错
3. 对于代码

fstream("test.dat", ios::out|ios::binary);
int x = 654321;
char* p = __________________ ;
fs.write(p, sizeof(int));

空白处应填写什么表达式?(请不要加空格等无效字符)
- reintepret_cast<char*>(&x)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值