用c语言写 函数名称:readFileForStu * 函数功能:从文件格式化读取数据 * 写入格式:共读取 num 行;每行读出一个 stu 型数据,每个成员变量之间用空格分隔 * 形式参数:struct stu * p,指向 stu 型一维数组首地址。该数组用于保存文件读取数据 * 形式参数:int num,一维数组元素个数,也即读取文件的行数 * 形式参数:char filename[],待读取的文件路径及名称 * 形式参数:char mode[],文件使用方式 * 返 回 值:无
时间: 2023-11-14 07:11:13 浏览: 49
下面是函数的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 100 // 文件中每行的最大长度
#define MAX_NAME_LEN 20 // 学生姓名的最大长度
// 学生结构体
struct stu {
char name[MAX_NAME_LEN]; // 姓名
int age; // 年龄
float score; // 成绩
};
// 从文件格式化读取数据
void readFileForStu(struct stu *p, int num, char filename[], char mode[]) {
FILE *fp; // 文件指针
char line[MAX_LINE_LEN]; // 临时存储每一行数据
char *token; // 用于切分每一行数据
int i, j;
// 打开文件
if ((fp = fopen(filename, mode)) == NULL) {
printf("Error: cannot open file %s.\n", filename);
exit(1);
}
// 逐行读取数据
for (i = 0; i < num; i++) {
fgets(line, MAX_LINE_LEN, fp);
token = strtok(line, " "); // 切分每行数据
j = 0;
while (token != NULL) {
switch (j) {
case 0:
strcpy(p[i].name, token); break;
case 1:
p[i].age = atoi(token); break;
case 2:
p[i].score = atof(token); break;
default:
break;
}
token = strtok(NULL, " ");
j++;
}
}
// 关闭文件
fclose(fp);
}
```
该函数首先打开指定的文件,然后逐行读取数据,每行数据通过空格进行切分,然后按照定义的结构体成员变量顺序赋值给数组中对应元素。最后关闭文件。