8.6本章习题

文章介绍了C++中的流类库,包括基类ios及其派生的istream和ostream类,预定义的四个流对象cin、cout、cerr和clog的用途和区别。还讨论了流的缓冲、错误处理以及getline()和read()函数的差异。同时提供了两个编程题,涉及从键盘输入和文件读取操作。
摘要由CSDN通过智能技术生成

一、填空题

1.在ios类库中,基类ios直接派生了两个类,分别是_istream类__和_ostream类__。
2.C++预定义的四个流对象中,不带缓冲的流对象是_标准错误流(cerr)__。
3.C++中的输入/输出流可以分为标准I/O流、文件流__和字符串流三类。
4.ifstream类默认的文件打开模式为 _iso::in。

二、判断题

1.在C++流类库中,ios根基类是一个抽象类。(√ )
2.ostream类提供的成员函数,如put()、write()函数等,无法连续调用。(× )
3.istream类提供的成员函数getline(),默认以‘\0’作为结束符。(getline()默认以’\n’作为结束符
4.文件流对象无法使用“>>”“<<”运算符传输数据。(× )
5.C++不支持文件的随机读写。( ×)

三、选择题

1.下列选项中,不属于刷新缓冲区的方式的是(D)。
A.执行flush()函数
B.执行endl语句
C.关闭文件
D.等上5 s时间编译器自动刷新

2.关于标准输入/输出流,下列说法中错误的是(C )。
A.输出流提供的put()函数用于单个字符的输出
B.write()函数一次可以输出一个字符串
C.输入流提供的get()函数在遇到’\n’时会结束读取 输入流提供的get()函数默认会读取一个字符
D.getline()一次可以读取一个字符串

3.下列选项中,只能用于检测文件读取操作的函数是(D)。
A.fail()
B.eof()
C.bad()
D.good()

4.下列选项中,可以清除输入流错误状态的函数是(A )。
A.clear()
B.fail()
C.put()
D.eof()

5.下列选项中,构建的文件流对象正确的是(BD )(多选)。
A.ifstream ifs; //ifs.open(); 手动打开
B.ifstream ifs(“filename”);
C.ofstream ofs;
D.fstream fs(“filename”);

6.关于文件的打开与关闭,下列说法中错误的是(C )。
A.ifstream类、ostream类和fstream类都提供了成员函数open()用于打开文件
B.ifstream类打开文件的默认方式是ios::in,ostream类打开文件的默认方式是ios::out
C.文件流使用完毕后,析构函数会自动释放资源,不用手动调用close()函数关闭文件
D.文件的打开方式可以组合使用

四、简答题

1.简述一下C++预定义的四个流对象之间的区别。

C++预定义了四个流对象,分别是:
cin:标准输入流对象,用于从键盘读取输入。
cout:标准输出流对象,用于向屏幕输出。
cerr:标准错误流对象,用于向屏幕输出错误信息。
clog:标准日志流对象,用于向屏幕输出程序运行时的日志信息。
这四个流对象之间的区别主要在于它们的用途和性质:
cin 和 cout 是最常用的两个流对象,用于从键盘读取输入和向屏幕输出。它们都是标准输入输出流对象,通常不会出现错误,因此不需要使用 clear() 函数清除错误状态。
cerr 和 clog 也是输出流对象,但它们通常用于向屏幕输出错误信息和调试信息,区别在于 cerr 输出的是错误信息,通常是不可恢复的错误,而 clog 输出的是日志信息,通常是可以恢复的错误或者程序运行状态的信息。与 cout 不同,cerr不会被缓冲,即立即将输出信息写入文件或者屏幕上。如果输出错误信息或者日志信息时出现错误,需要使用 clear() 函数清除错误状态。

2.简述一下getline()函数与read()函数的区别。

getline() 函数和 read() 函数都是 C++ 中用于从输入流中读取数据的函数,但它们之间有以下几个区别:
参数不同:getline() 函数需要两个参数,第一个参数是输入流对象,第二个参数是存储读取数据的字符串,而 read() 函数需要三个参数,第一个参数是字符数组的指针,第二个参数是读取字符的数量,第三个参数是输入流对象。
读取方式不同:getline() 函数会读取输入流中的一行数据,直到遇到换行符为止,包括换行符在内,而 read() 函数会按照指定的字节数读取数据,不考虑换行符等其他字符。
读取数据类型不同:getline() 函数读取的是字符串类型的数据,即 std::string 类型,而 read() 函数读取的是字符类型的数据,即 char 类型。
处理换行符的方式不同:getline() 函数会将读取到的换行符从输入流中删除,而 read() 函数不会删除换行符,需要手动处理。
因此,getline() 函数适用于读取一行字符串类型的数据,而 read() 函数适用于读取固定字节数的字符类型的数据。

五、编程题

1.请编写程序实现以下功能:从键盘输入若干个字符串,统计长度最长的字符串,并输出最长字符串的内容和长度。

2.有一个文本文件data.txt,它记录了几个学生的信息,内容如下:
姓名 学号 性别 年龄
张三 1001 男 22
李明 1002 男 21
李红 1003 女 22
李明 1004 女 20
请编写一个程序,从文本文件data.txt中找出所有叫“李明”的学生,并输出他们的信息。

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {
  ofstream ofs("data.txt");
  if (!ofs) {
    cout << "打开文件失败!" << endl;
    return 0;
  }

  // 将学生信息写入文件
  ofs << "姓名 学号 性别 年龄" << endl;
  ofs << "张三 1001 男 22" << endl;
  ofs << "李明 1002 男 21" << endl;
  ofs << "李红 1003 女 22" << endl;
  ofs << "李明 1004 女 20" << endl;

  ofs.close();

  ifstream ifs("data.txt");
  if (!ifs) {
    cout << "打开文件失败!" << endl;
    return 0;
  }

  string name, id, sex, age;
  while (ifs >> name >> id >> sex >> age) {
    if (name == "李明") {
      cout << "姓名:" << name << " 学号:" << id
           << " 性别:" << sex << " 年龄:" << age << endl;
    }
  }

  ifs.close();

  return 0;
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值