建立一个包含学生学号、姓名、成绩的文本文件。本例程一行放一个学生记录。
#include<iostream>
#include<fstream>
using namespace std;
/*
* 文本文件用文本文件流进行读/写操作。文本文件是顺序存取文件
* 文本文件用默认的方式的打开
* 描述一个对象的信息称为一个记录。文本文件本身没有记录逻辑结构。为了便于识别,
在文本文件中通常将一个记录放在一行(用换行符分隔的逻辑行)。记录的每个数据项
之间可以用空白符、换行符、制表符等作为分隔符
*
*/
int main() {
char fileName[30], name[30];
int number, score;
ofstream outstuf;//建立输出文件流对象
cout << "Please input the name of students file:\n";
cin >> fileName;//输入文件名
outstuf.open(fileName, ios::out);//连接文件,指定打开方式
if (!outstuf)//调入重载算符函数测试流
{
cerr << "File could not be open." << endl;
abort();
}
outstuf << "This is a file of students\n";//写入一行标题
cout << "Input the number,name,and score:"
<< "(Enter Ctrl+Z to end Input)\n?";
while (cin >> number >> name >> score) {
outstuf << number<<'\t' << name <<'\t' << score << '\n';//向流插入数据
cout << "?";
}
outstuf.close();
}
程序运行所用例子
程序运行后所生成的文本
关于读取文本文件。读取上述代码建立的文本文件D :\student.txt,在屏幕上显示学生记录,以及最高分数、最低分数和平均分数。
#include<iostream>
#include<fstream>
using namespace std;
int main() {
char name[30], s[80];
int number, score;
int n = 0, max, min, total = 0;
double ave;
ifstream instuf("d:\\student.txt", ios::in);//打开文件
instuf.seekg(0, ios::beg);//流指针置在文件头
if (!instuf)
{
cerr << "File could not be open." << endl;
abort();
}
instuf.getline(s, 80);//略去标题行
while (instuf >> number >> name >> score)//提取并测试
{
cout << number << "\t" << name << "\t" << score << '\n';
if (n == 0)
max = min = score;
else
{
if (score > max)max = score;
if (score < min)min = score;
}
total += score;
n++;
}
ave = double(total) / n;
cout << "maximal is : " << max << "\nminimal is : " << min << "\naverage is : " << ave << '\n';
instuf.close();//关闭文件
}
/*
* 浏览文件,部队文件数据进行任何处理,只需要简单的浏览一下文件。
* 函数browseFile用getline按行读出文件中的字符,
* 直接显示在屏幕上
* browseFile("d:\\file\\students.txt",0);来调用
*/
void browseFile(char*fileName,int delLine)
{
ifstream inf(fileName, ios::in);
char s[80];
for (int i = 1; i <= delLine; i++)//读出开头delLine行不显示
inf.getline(s, 80);
while (!inf.eof())
{
inf.getline(s, 80);//按行读出文件
cout << s << endl;//按行显示
}
inf.close();
}
/*
* 以app方式打开文件,向文件中追加数据
* 一个文本文件一旦建立之后,不能随意插入数据,但可以在文件尾部追加数据
*/
int Append(char* fileName)
{
char name[30], ch;
int number, score;
ofstream outstuf(fileName, ios::app);//以追加方式打开文件
if (!outstuf)
{
cerr << "File could not be open." << endl;
return 0;//返回0表示文件不能打开
}
cout << "DO you want append record to " << fileName << "?(Y or N)\n";
cin >> ch;//用户应答
while (ch == 'Y' || ch == 'y')
{
cout << "Input the number, name, and score :\n";
cin >> number >> name >> score;
outstuf << number << '\t' << name << '\t' << score << '\n';//追加一个记录
cout << "?(Y or N)";
cin >> ch;//用户问答
if (ch == 'N' || ch == 'n')
cout << "Close file.\n";
}
outstuf.close();
return 1;//返回1表示文件正常操作
}
本文章所有代码数据来源《C++程序设计基础》(周霭如 林伟健),仅为本人学习文件c++存取的一些整理笔记。