FILE *fp; if((fp=fopen("stu.txt","rb"))==NULL) { printf("文件打开失败\n"); } while(!feof(fp)) { if(fread(&stu[m],LEN,1,fp)==1) { m++; } } fclose(fp); if(m==0) { printf("文件没有内容\n"); }
时间: 2024-04-25 15:27:54 浏览: 17
这段代码是用来读取二进制文件 "stu.txt" 中的数据,并将读取到的数据存放在一个名为 "stu" 的数组中。在这个数组中,每个元素的大小为 LEN 字节。如果文件打开成功,则会进入 while 循环,每次循环都会通过 fread 函数读取一个数据块,然后将它存放在数组中。当文件读取结束时,feof 函数将返回 true,循环结束。最后,关闭文件句柄,如果数组中没有任何数据,则输出 "文件没有内容"。
相关问题
修改以下代码“”“#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;
}
```
#include <stdio.h> #include <stdlib.h> typedef struct student { int sno; char name[20]; int score[3]; } Student; int main() { FILE *fp; Student stu; fp=fopen("f1.dat","wb"); if(fp==NULL) {printf("cannot open"); exit(1); } int sno; scanf("%d",&sno); while(sno!=0) { stu.sno=sno; scanf("%s",&stu.name); scanf("%d %d %d",&stu.score[0],&stu.score[1],&stu.score[2]); fwrite(&stu,sizeof(struct student),1,fp); scanf("%d",&sno); } fclose(fp); fp = fopen("f1.dat", "rb"); if (fp == NULL) { printf("cannot open"); exit(1); } // 循环读取每个学生的信息,并打印输出 while (fread(&stu, sizeof(struct student), 1, fp) == 1) { printf("sno: %d\n", stu.sno); printf("name: %s\n", stu.name); printf("score1: %d, score2: %d, score3: %d\n", stu.score[0], stu.score[1], stu.score[2]); printf("\n"); } fclose(fp); return 0; }这串代码中如何实现文件数据的增加或者删除代码,请写一下
要实现文件数据的增加,可以使用"a+"模式打开文件,将新的数据写入文件末尾;要实现文件数据的删除,可以通过重新写入文件的方式,将需要删除的数据从文件中剔除。
增加数据的代码示例:
```c
fp=fopen("f1.dat","a+"); //以"a+"模式打开文件
if(fp==NULL) {
printf("cannot open");
exit(1);
}
int sno;
scanf("%d",&sno);
while(sno!=0) {
stu.sno=sno;
scanf("%s",&stu.name);
scanf("%d %d %d",&stu.score[0],&stu.score[1],&stu.score[2]);
fwrite(&stu,sizeof(struct student),1,fp); //将新的数据写入文件末尾
scanf("%d",&sno);
}
fclose(fp);
```
删除数据的代码示例:
```c
fp=fopen("f1.dat","rb"); //先以"rb"模式打开文件,读取数据
if(fp==NULL) {
printf("cannot open");
exit(1);
}
int sno_del;
scanf("%d",&sno_del);
FILE *fp_tmp=fopen("f1.tmp","wb"); //打开一个临时文件,用于存储剔除后的数据
if(fp_tmp==NULL) {
printf("cannot open");
exit(1);
}
while(fread(&stu,sizeof(struct student),1,fp)==1) { //遍历文件中的所有数据
if(stu.sno!=sno_del) { //如果不是需要删除的数据,则将其写入临时文件中
fwrite(&stu,sizeof(struct student),1,fp_tmp);
}
}
fclose(fp);
fclose(fp_tmp);
remove("f1.dat"); //删除原文件
rename("f1.tmp","f1.dat"); //将临时文件重命名为原文件名
```