📄 pointer_file.cpp
字号:
#include "stdafx.h"
struct studentinfo
{
int no; //学号
char name[15]; //姓名
float score[3]; //三门课程的成绩
float avr; //平均成绩
};
typedef studentinfo STUDENT;
// 输出单个学生的信息
void outPutStudent(STUDENT student)
{
printf("################ 学生信息为 ############## \n");
printf("%d %s %.2f %.2f %.2f %.2f\n", student.no, student.name, student.avr, student.score[0],student.score[1], student.score[2]);
}
// 将数据写到(文本)文件 , 针对一个自定义数据类型的情况
void writeFile(char* file_name, char* mode, STUDENT student)
{
FILE *out;
int i = 0;
if((out = fopen(file_name, mode)) == NULL)
{
printf( "cannot open %s\n", file_name );
//exit(1);
}
// fprintf();
int count1 = fwrite(&student, sizeof(STUDENT), 1, out);
printf("count = %d\n", count1);
fclose(out);
}
// 将数据从(文本)文件中读取,可以一个返回结构体类型的数据
STUDENT readFile(char* file_name, char* mode)
{
FILE* read;
//char buffer[1024];
if((read = fopen( file_name, mode )) == NULL )
//r read,w write,t textmode,b binary mode
{
printf("can not open %s\n", file_name);
//exit(1);
}
STUDENT student;
/*
C语言还提供了用于整块数据的读写函数。 可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp); 写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp); 其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。 size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。
*/
fread(&student, sizeof(STUDENT), 1, read); // 读取一个结构体类型的数据
fclose( read );
outPutStudent(student); // 测试输出信息
return student;
}
// 读取多个学生的信息
void readFile(char* file_name, char* mode, int count)
{
FILE* read;
char buffer[ 1024 ];
if((read = fopen( file_name, mode )) == NULL )
//r read,w write,t textmode,b binary mode
{
printf("can not open %s\n", file_name);
exit(1);
}
STUDENT student[N];
for (int i = 0; i < count; i++ )
{
fread(&student[i], sizeof(STUDENT), 1, read); // 读取一个结构体类型的数据
}
printf("i = %d\n", i);
outPutStudent(student, i); // 输出多个学生信息
// while(fgets(buffer, 1024, in) != NULL )
// printf("%s", buffer );
fclose( read );
}
// 将多个学生的信息写到文本文件
void writeFile(char* file_name, char* mode, STUDENT student[], int count)
{
FILE *out;
int i = 0;
if((out = fopen(file_name, mode)) == NULL)
{
printf( "cannot open %s\n", file_name );
exit(1);
}
// fprintf();
for (int i = 0; i < count; i++) // 依次写入文件
{
int count1 = fwrite(&student[i], sizeof(STUDENT), 1, out);
printf("count = %d\n", count1);
}
fclose(out);
}
void testFile()
{
STUDENT student = {
102, "imti 英泰 ", 99.3, 89.7, 100,(99.3+89.7+100)/3 };
writeFile("student.txt", "w", student);// 写
readFile("student.txt", "r"); //读
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -