实验目的:
练习标准的输入输出流和文件输入输出流。
实验器材:
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;
}
实验结果(附数据和图表):
一:
二:
- .红在前,蓝在后(先getline,后get)
不会自动输出szBuf1的,需要人为给一个回车才能输
- .蓝在前,红在后(先get,后getline)
自动输出szBuf2
三
四.
五.
实验结果分析及结论:
- .ofstream流在往文件写入过程中,如果没有文件,就会自动创建,而fstream则不会自动创建
- .cin.getline()是会读取到\0的,会导致下一行的cin.get()就不能输出
- .int n=cin.get()是读取输入流第一个字符的ASCII码
- .cin.get()是不会读取到\0的,作用2是清空流缓冲区
- .int rdstate(); :返回值是状态信息的特征值
- .cin.clear()是清空状态标识符
实验心得体会和建议:
通过实验,加深了对数据的读取方法的记忆,明白了打开文件的两种方式(一种是用open函数,一种是用构造函数)也清晰的辨别了文件输入输出的关键字,有了较深的体会。