STL-标准的i/o文件和i/o流

本文介绍了使用C++的输入输出流和文件I/O流进行编程练习,包括基本的get和getline函数应用,以及fstream与ofstream的区别。通过实例展示了如何读取数据、写入文件,并提供了实验结果分析和心得体会。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验目的:

练习标准的输入输出流和文件输入输出流。

实验器材:

Code blocks

实验内容:

一、练习课本第4章的例4.1-4.10。最好先把例子看懂,然后自己在不看书的情况下写出代码,然后进行调试和比对。

二、在例4.3中,回顾课堂上所讲get和getline函数的异同,并通过写代码并运行加深体会。

三、在例4.6和4.7中,试验并理解使用文件I/O流时不同的文件打开方式。

实验步骤:

测试一 :

#include<iostream>

using namespace std;

int main(){

int a;

string str;

cin>>a>>str;

cout<<"a="<<a<<endl;

cout<<"str="<<str<<endl;

}

测试二:

#include<iostream>

using namespace std;

int main(){

char szBuf[60];

cout<<"请输入一个字符串:";

int n=cin.get();//相当于是一个cin,同时也会得到一个元素的ASII码

cout<<"n="<<n<<endl;

cin.getline(szBuf,60);//接着读一行字符,遇到结束字符"\0"停止

cout<<"szBuf2="<<szBuf<<endl;

cin.get(szBuf,60);

cout<<"szBuf1="<<szBuf<<endl;

}

测试三:

#include<iostream>

using namespace std;

int main(){

int a;

while(1){

                cout<<"请输入数据a=";

                cin>>a;

                cout<<"状态值为:"<<cin.rdstate()<<endl;

                if(cin.fail()){

                                cout<<"输入有错!"<<endl;

                                cin.clear();//清空状态标识符

                                cin.get();//清空流缓冲区

                }

                else {

                                cout<<a<<endl;

                         break;

                }

}

return 0;

}

测试四:

#include<iostream>

#include <fstream>

using namespace std;

struct STUDENT{

char name[20];

int nGrade;

};

int main(){

                ofstream out;

                out.open("E:\\STL\\a.txt");

                STUDENT s1={"张三",90};

                STUDENT s2={"李四",100};

                STUDENT s3={"王五",100};

                out<<s1.name<<"\t"<<s1.nGrade<<endl;

                out<<s2.name<<"\t"<<s2.nGrade<<endl;

                out<<s3.name<<"\t"<<s3.nGrade<<endl;

                out.close();

return 0;

}

测试五:

#include<iostream>

#include <fstream>

using namespace std;

struct STUDENT{

char name[20];

int nGrade;

};

int main(){

               ofstream out;

                out.open("E:\\STL\\a.txt",ios::out);

                STUDENT s1={"张三",90};

                STUDENT s2={"李四",100};

                STUDENT s3={"王五",100};

                out<<s1.name<<"\t"<<s1.nGrade<<endl;

                out<<s2.name<<"\t"<<s2.nGrade<<endl;

                out<<s3.name<<"\t"<<s3.nGrade<<endl;

                out.close();

                ofstream out1;//写

                out1.open("E:\\STL\\a.txt",ios::app);

                if(!out1)

                                cout<<"文件打开错误"<<endl;

                else

                                out1<<"你好"<<endl;

return 0;

}

实验结果(附数据和图表):

一:

二:

  1. .红在前,蓝在后(先getline,后get)

不会自动输出szBuf1的,需要人为给一个回车才能输

  1. .蓝在前,红在后(先get,后getline)

自动输出szBuf2

四.

五.

实验结果分析及结论:

  1. .ofstream流在往文件写入过程中,如果没有文件,就会自动创建,而fstream则不会自动创建
  2. .cin.getline()是会读取到\0的,会导致下一行的cin.get()就不能输出
  3. .int n=cin.get()是读取输入流第一个字符的ASCII码
  4. .cin.get()是不会读取到\0的,作用2是清空流缓冲区
  5. .int rdstate(); :返回值是状态信息的特征值
  6. .cin.clear()是清空状态标识符

实验心得体会和建议:

通过实验,加深了对数据的读取方法的记忆,明白了打开文件的两种方式(一种是用open函数,一种是用构造函数)也清晰的辨别了文件输入输出的关键字,有了较深的体会。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值