if(fread(&cf[i], sizeof(classfee),6,fp)!=NULL)为什么错了
时间: 2024-02-06 10:09:44 浏览: 23
这个代码段的问题在于它使用了一个错误的条件判断方式。`fread` 返回的是读取的元素个数,如果读取失败,则返回值为0。因此,你应该将条件判断语句修改为以下方式:
```
if(fread(&cf[i], sizeof(classfee),6,fp) == 6) {
// 读取成功
} else {
// 读取失败
}
```
这样可以保证只有在成功读取6个元素时才会执行相关操作。
相关问题
stream!=null
引用\[1\]:当出现"stream!=NULL"的错误时,通常是由于文件处理问题引起的。这个错误提示告诉你传入的参数是NULL。可能出现错误的地方是在文件处理函数上,比如fopen()、fread()、fprintf()等。你应该检查一下为什么打开文件流失败,最好在这些函数后面加上错误处理,以便更好地定位问题。\[1\]
问题: "stream!=null"错误的原因是什么?
回答: "stream!=null"错误通常是由于文件处理问题引起的。可能是在文件处理函数上出现了问题,比如fopen()、fread()、fprintf()等。你应该检查一下为什么打开文件流失败,并在这些函数后面加上错误处理,以便更好地定位问题。\[1\]
#### 引用[.reference_title]
- *1* *3* [VS2010下出现的Expression:(stream!=Null)问题](https://blog.csdn.net/qq_33233768/article/details/54288176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [关于C语言如何解决stream=nullptr的问题](https://blog.csdn.net/highlighters/article/details/120963417)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
#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"); //将临时文件重命名为原文件名
```