实验 九 I/O流

实验目的和要求

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

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

3.掌握磁盘文件的输入输出方法。
实验内容
1.程序sy9_1.cpp用以打印表中的数据,但程序中存在逻辑错误。上机调试后写出正确的代码。

原程序如下:

//sy9_1.cpp  
#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;  
}

修改后的程序如下:

//sy9_1.cpp
#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.编程实现下面要求:(sy9_2.cpp)
以左对齐方式输出整数40000,域宽为15。
打印有符号数和无符号数100。
将十进制整数100以0x开头的十六进制格式输出。
用前导*格式打印1.234,域宽为10。

编写程序如下:

//sy9_2.cpp
#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和家庭住址。(sy9_3.cpp)
4.从键盘上输入学生的QQ号,在由第3题所建立的通讯录文件中查找该同学的资料。查找成功时,显示其所有通讯录信息。(sy9_4.cpp)
分析与讨论
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();

实验总结

     通过本次实验,我们首先要掌握格式化的输入输出方法以及熟悉系统提供的输入操作函数,C++的I/O流类库提供了两种控制格式输入输出的方法:一种是ios类的成员函数,另一种是使用控制符,所以我们应该掌握这两种方法的使用。接下来我们还要掌握磁盘文件的输入输出方法,要打开文件输入输出流,就要定义一个fstream类型的对象。在实验过程中,我也遇到了一些问题,通过这些问题也让我明白无论我们的理论与实践相结合的重要性,在掌握理论的同时也要去实践间,两者缺一不可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 的输入输出(I/O)提供了在程序中读取和写入数据的方式。它们是通过处理(或过滤器)的方式工作的,这些允许你对数据进行处理和转换。 常用的输入输出有: 1. FileInputStream:用于从文件中读取字节。 2. FileOutputStream:用于向文件中写入字节。 3. FileReader:用于从文件中读取字符。 4. FileWriter:用于向文件中写入字符。 5. ByteArrayInputStream:用于从内存中读取字节。 6. ByteArrayOutputStream:用于向内存中写入字节。 7. CharArrayReader:用于从字符数组中读取字符。 8. CharArrayWriter:用于向字符数组中写入字符。 9. StringReader:用于从字符串中读取字符。 10. StringWriter:用于向字符串中写入字符。 下面是一个简单的示例,演示了如何使用FileInputStream和FileOutputStream来复制一个文件: ```java import java.io.*; public class FileCopyDemo { public static void main(String[] args) throws IOException { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream("input.txt"); out = new FileOutputStream("output.txt"); int c; while ((c = in.read()) != -1) { out.write(c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } } } } ``` 这个程序将从名为input.txt的文件中读取字节,并将它们写入名为output.txt的文件中。在读取和写入完成后,程序会关闭这两个。 需要注意的是,在使用输入输出时,要确保正确地处理异常和关闭。可以使用try-with-resources语句来简化这个过程,如下所示: ```java try (FileInputStream in = new FileInputStream("input.txt"); FileOutputStream out = new FileOutputStream("output.txt")) { int c; while ((c = in.read()) != -1) { out.write(c); } } catch (IOException e) { e.printStackTrace(); } ``` 在此示例中,使用了try-with-resources语句来创建和管理输入输出。当try块结束时,会自动关闭这两个,从而避免了显式地关闭的需要。 除了上述示例中使用的之外,Java 还提供了许多其他的输入输出,以满足不同的需求。你可以根据需要选择适合自己的

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值