void yjsxxbaoc(LinkListyj yjhead) //研究生信息保存 { FILE *fp; fp=fopen("yjsxxbaoc.txt","w"); LinkListyj p ; p = yjhead->next ; if(fp==NULL) { printf("文件读入失败\n"); exit(0); } while(p) { fprintf(fp,"%s %s %s %s %s %s\n",p->ID,p->name, p->xingb,p->age,p->zyname,p->beiz); p = p->next ; } fclose(fp); }
时间: 2024-02-14 12:24:27 浏览: 50
这段代码实现了将链表中的研究生信息保存到文件中。具体实现方法如下:
首先,代码中使用 `fopen()` 函数创建一个名为 `yjsxxbaoc.txt` 的文件,并以写入模式打开。如果打开失败,则输出提示信息,并调用 `exit()` 函数退出程序。
然后,定义一个指向链表头节点的指针 `p`,从头节点的下一个节点开始遍历整个链表。在遍历过程中,使用 `fprintf()` 函数将每个节点的信息按照一定的格式写入到文件中。写入的信息包括:学号、研究生姓名、性别、身份出生日期、专业名称和备注。
最后,使用 `fclose()` 函数关闭文件。
这段代码的作用是将链表中的研究生信息保存到一个文件中,方便后续的读取和处理。
相关问题
修改以下代码“”“#include<stdio.h> #define N 5 typedef struct student{ long sno; char name[10]; float score[3]; }STU; void fun(char *filename,STU n){ FILE *fp; /**********found**********/ fp=fopen(filename,"rb"); /*********”
#include <stdio.h>
#define N 5
typedef struct student {
long sno;
char name[10];
float score[3];
} STU;
void fun(char *filename, STU n) {
FILE *fp;
fp = fopen(filename, "rb");
if (fp == NULL) {
printf("Cannot open file!\n");
return;
}
fread(&n, sizeof(STU), 1, fp);
printf("sno:%ld\nname:%s\nscore[0]:%.2f\nscore[1]:%.2f\nscore[2]:%.2f\n", n.sno, n.name, n.score[0], n.score[1], n.score[2]);
fclose(fp);
}
int main() {
STU s[N] = {
{20210001, "Tom", {89, 78, 92}},
{20210002, "Jerry", {78, 87, 91}},
{20210003, "Mickey", {90, 77, 83}},
{20210004, "Minnie", {94, 92, 90}},
{20210005, "Donald", {85, 88, 82}}
};
FILE *fp;
fp = fopen("test.dat", "wb");
if (fp == NULL) {
printf("Cannot open file!\n");
return 0;
}
fwrite(&s[2], sizeof(STU), 1, fp);
fclose(fp);
fun("test.dat", s[2]);
return 0;
}
```
void save_records() { FILE *fp; fp = fopen("records.dat", "rb"); if (fp == NULL) { printf("Failed to open file!\n"); return; } fwrite(records, sizeof(struct Employee), num_records, fp); fclose(fp); printf("Records have been saved to file successfully!\n"); } void load_records() { FILE *fp; fp = fopen("records.dat", "rb"); if (fp == NULL) { printf("Failed to open file!\n"); return; } 解决c语言项目保存打开后乱码的问题
在函数save_records()中,文件打开模式应该为"wb" (写入二进制),而不是"rb" (读取二进制)。修改代码如下:
```c
void save_records() {
FILE *fp;
fp = fopen("records.dat", "wb");
if (fp == NULL) {
printf("Failed to open file!\n");
return;
}
fwrite(records, sizeof(struct Employee), num_records, fp);
fclose(fp);
printf("Records have been saved to file successfully!\n");
}
```
在函数load_records()中,同样应该使用"rb"模式打开文件。另外,在读取完数据后,需要检查读取的数据数量是否与实际数量相符。如果不相符,说明文件中的数据可能有误。修改代码如下:
```c
void load_records() {
FILE *fp;
fp = fopen("records.dat", "rb");
if (fp == NULL) {
printf("Failed to open file!\n");
return;
}
// 读取数据到sorted_records数组中
int num_read = fread(sorted_records, sizeof(struct Employee), MAX_RECORDS, fp);
if (num_read != num_records) {
printf("Error: The number of records read from file is not consistent with the actual number of records!\n");
fclose(fp);
return;
}
fclose(fp);
printf("Records have been loaded from file successfully!\n");
}
```
另外,还需要注意一下读取和写入的顺序需要一致。如果读取时使用了"rb"模式,那么保存时也应该使用"rb"模式。同理,如果读取时使用了"r"模式,那么保存时也应该使用"w"模式。
阅读全文