实验九 I/O流



一、实验目的和要求

1.掌握格式化的输入输出方法。

2.熟悉系统提供的输入操作函数。

3.掌握磁盘文件的输入输出方法。

二、实验内容

1.程序sy9_1.cpp用以打印表中的数据,但程序中存在逻辑错误。上机调试后写出正确的代码。

  1. #include<iostream>      
  2. #include<iomanip>      
  3. using namespace std;      
  4. int main()      
  5. {      
  6.     int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};      
  7.     cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]      
  8.     <<endl<<n[1][0]<<n[1][1]<<n[1][2]      
  9.     <<endl<<n[2][0]<<n[2][1]<<n[2][2]<<endl;      
  10.     return 0;      
  11. }     
#include<iostream>    
#include<iomanip>    
using namespace std;    
int main()    
{    
    int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};    
    cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]    
    <<endl<<n[1][0]<<n[1][1]<<n[1][2]    
    <<endl<<n[2][0]<<n[2][1]<<n[2][2]<<endl;    
    return 0;    
}   

运行结果:

修改:

  1. #include<iostream>      
  2. #include<iomanip>      
  3. using namespace std;      
  4. int main()      
  5. {      
  6.     int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};      
  7.     cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]      
  8.     <<setw(10)<<endl<<n[1][0]<<n[1][1]<<n[1][2]      
  9.     <<setw(10)<<endl<<n[2][0]<<n[2][1]<<n[2][2]<<endl;      
  10.     return 0;      
  11. }  
#include<iostream>    
#include<iomanip>    
using namespace std;    
int main()    
{    
    int n[3][3]={{1,2,3},{4,5,6},{7,8,9}};    
    cout<<setw(10)<<n[0][0]<<n[0][1]<<n[0][2]    
    <<setw(10)<<endl<<n[1][0]<<n[1][1]<<n[1][2]    
    <<setw(10)<<endl<<n[2][0]<<n[2][1]<<n[2][2]<<endl;    
    return 0;    
}

调试结果:


2.编程实现下面要求:

以左对齐方式输出整数40000,域宽为15。

打印有符号数和无符号数100。

将十进制整数100以0x开头的十六进制格式输出。

用前导*格式打印1.234,域宽为10。

  1. #include<iostream>      
  2. #include<iomanip>      
  3. using namespace std;      
  4. int main()      
  5. {      
  6.     double a=40000;      
  7.     cout<<setiosflags(ios_base::left)<<setw(15)<<a<<endl;      
  8.     cout<<showpos<<100<<"\t"<<100u<<endl;      
  9.     cout.setf(ios::showbase);      
  10.     cout<<"以0x开头的十六进制输出100:";      
  11.     cout.setf(ios::hex,ios::basefield);      
  12.     cout<<100<<endl;      
  13.     cout<<noshowpos<<right<<setfill('*')<<setw(10)<<1.234<<endl;      
  14.     return 0;      
  15. }  
#include<iostream>    
#include<iomanip>    
using namespace std;    
int main()    
{    
    double a=40000;    
    cout<<setiosflags(ios_base::left)<<setw(15)<<a<<endl;    
    cout<<showpos<<100<<"\t"<<100u<<endl;    
    cout.setf(ios::showbase);    
    cout<<"以0x开头的十六进制输出100:";    
    cout.setf(ios::hex,ios::basefield);    
    cout<<100<<endl;    
    cout<<noshowpos<<right<<setfill('*')<<setw(10)<<1.234<<endl;    
    return 0;    
}

运行结果:


3.建立某班同学通讯录二进制文件,文件中的每个记录包括姓名、电话号码、QQ号、E-mail和家庭住址。

4.从键盘上输入学生的QQ号,在由第3题所建立的通讯录文件中查找该同学的资料。查找成功时,显示其所有通讯录信息。

三、分析与讨论

1.结合实验内容中第1题和第2题,说明格式化的输入输出方法和应注意的问题。

 答:C++的I/O流库提供了两种控制格式的输入输出的方法:一种是iOS类的成员函数,另一种是使用控制符;在iOS类中有几个成员函数可用来对输入输出的格式控制,这些成员函数通过对格式标志字、域宽、填充符及输出精度的设定来控制输入输出的格式,使其后的输入输出操作按设定的格式进行;C++的I/O流类库中又提供一种使用控制符进行格式化输出的方法,这些控制符与成员函数调用的效果一样,它们可以直接插入到流中,而不必再单独调用,也可直接被插入符或提取符操作。但控制符中没有的功能还需使用成员函数的方法来提供。这些控制符是一些特殊的函数,其中所有不带形式参数的函数是在头文件iostream.h中定义的,而所有带形式参数的函数定义则定义在iomanip.h中,如第1题中的set(10)和第2题中的set(10)就是在iomanip.h中定义的。应注意的问题有:数据输出宽度在默认情况下为表示该数据所需的最少字符数;如果所设置的数据宽度小于数据所需的最少字符数,则数据宽度按默认宽度处理。

2.结合实验内容中第3题和第4题,说明磁盘文件的输入输出方法。

 答:按数据的存储形式来分类,文件可分为文本文件和二进制文件。按数据的存取方式来分类,文件可分为顺序文件和随机读取文件。文件的打开和关闭方法为:打开文件就是使一个文件流对象与一个指定的文件相关联。对象名.open(文件名,方式);文件在打开后可进行读写操作,在读写操作完成后应将其关闭,就是使打开的文件与流对象“脱钩”。<流对象名>.close();

四、实验总结

    通过本次实验,我们学会了I/O数据流的相关知识,通过对实验的操作加深对理论知识的了解,也在编写代码的过程中,提升了相关能力。掌握了格式化的输入输出方法、熟悉了系统提供的输入操作函数、掌握了磁盘文件的输入输出方法。通过实验让我们对书本的知识认识和理解的更加深刻,受益良多。

阅读更多

没有更多推荐了,返回首页