void ModifyFile() { system("cls"); Menu1(); book stu; FILE *fp; char x[8]; printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); printf("请输入图书id:"); scanf("%s", x); fp = fopen("book1.dat", "rb+"); if (fp == NULL) { printf("文件打
时间: 2023-07-11 09:00:04 浏览: 44
开失败!\n"); return; } fseek(fp, 0, SEEK_SET); while (fread(&stu, LEN, 1, fp)) { if (strcmp(x, stu.id) == 0) { printf("请重新输入图书id: "); scanf("%s", stu.id); printf("请重新输入书名: "); scanf("%s", stu.name); printf("请重新输入书籍作者 : "); scanf("%s", stu.author); printf("请重新输入价格: "); scanf("%f", &stu.price); fseek(fp, -LEN, SEEK_CUR); fwrite(&stu, LEN, 1, fp); printf("修改成功!\n"); break; } } fclose(fp); }
这段代码的功能是修改存储在二进制文件book1.dat中的图书信息。首先要求用户输入要修改的图书的id,然后打开文件,利用fseek函数从文件的开头开始遍历所有图书,查找到要修改的图书信息后,允许用户输入新的图书信息,再利用fseek函数回到该图书信息在文件中的位置,用fwrite函数将新的图书信息写入文件中,完成修改操作。
相关问题
解释该行代码 FILE *fp = NULL; book stu; char flag = 'y'; fp = fopen("book1.dat", "ab+");
这行代码的作用是定义了一个文件指针 fp 和结构体变量 stu,同时将 flag 初始化为 'y'。然后通过 fopen 函数打开了一个名为 "book1.dat" 的二进制文件,并以追加方式打开,将文件指针指向文件末尾。如果成功打开文件,则返回文件指针;否则返回 NULL。
修改以下代码“”“#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;
}
```