weixin_51425318 2021-03-23 21:04 采纳率: 40%
浏览 27

为什么最后一个重复?

 

#include <stdio.h>
#include <stdlib.h>

struct student{
	long num;
	int score;
	char name[10];
};

int main()
{
	struct student p,*stu=&p;
	FILE *fp;
	if((fp=fopen("a.dat","wb+"))==NULL){
		printf("不能打开文件!\n");
		exit(0);
	}
	printf("请输入学生学号、姓名和成绩(成绩为负数时结束):\n");
	scanf("%ld%s%d",&stu->num, stu->name, &stu->score);
	while(stu->score>=0){
		fwrite(stu,sizeof(p),1,fp);
		scanf("%ld%s%d",&stu->num, stu->name, &stu->score);
	}
	fseek(fp,0L,0);
	printf("输入文件如下:\n");
	while(!feof(fp))
	{
		fread(stu,sizeof(p),1,fp);
		printf("%ld %s %d\n",stu->num,stu->name,stu->score);
	}
	return 0;
}

#include <stdio.h>
#include <stdlib.h>

struct student{
	long num;
	int score;
	char name[10];
};

int main()
{
	struct student p,*stu=&p;
	FILE *fp;
	if((fp=fopen("a.dat","wb+"))==NULL){
		printf("不能打开文件!\n");
		exit(0);
	}
	printf("请输入学生学号、姓名和成绩(成绩为负数时结束):\n");
	scanf("%ld%s%d",&stu->num, stu->name, &stu->score);
	while(stu->score>=0){
		fwrite(stu,sizeof(p),1,fp);
		scanf("%ld%s%d",&stu->num, stu->name, &stu->score);
	}
	fseek(fp,0L,0);
	printf("输入文件如下:\n");
	fread(stu,sizeof(p),1,fp);
	while(!feof(fp))
	{
		printf("%ld %s %d\n",stu->num,stu->name,stu->score);
		fread(stu,sizeof(p),1,fp);
	}
	return 0;
}

改成这个后就不重复了???(改变了了fread的位置

  • 写回答

1条回答 默认 最新

  • 我不喜欢这个世界 2021-03-23 22:02
    关注
    #include <stdio.h>
    
    
    #include <stdlib.h>
    
    
     
    
    
    struct student{
    
    
    	long num;
    
    
    	int score;
    
    
    	char name[10];
    
    
    };
    
    
     
    
    
    int main()
    
    
    {
    
    
    	struct student p,*stu=&p;
    
    
    	FILE *fp;
    
    
    	if((fp=fopen("a.dat","wb+"))==NULL){
    
    
    		printf("不能打开文件!\n");
    
    
    		exit(0);
    
    
    	}
    
    
    	printf("请输入学生学号、姓名和成绩(成绩为负数时结束):\n");
    
    
    
    
    
    	while(stu->score>=0){
    
    		scanf("%ld%s%d",&stu->num, stu->name, &stu->score);
    		fwrite(stu,sizeof(p),1,fp);
    
    
    		
    
    
    	}
    
    
    	fseek(fp,0L,0);
    
    
    	printf("输入文件如下:\n");
    
    
    	while(1)
    
    
    	{
    
    
    		fread(stu,sizeof(p),1,fp);
    		if( feof(fp) )
    		      {
    		          break ;
    		      }
    
    		printf("%ld %s %d\n",stu->num,stu->name,stu->score);
    
    
    	}
    
    
    	return 0;
    
    
    }

    feof用检测流上的文件结束符,其返回值有两种情况:如果遇到文件结束,函数值为非零值,否则函数值为0

    还有输入的地方也有逻辑问题

    评论

报告相同问题?

悬赏问题

  • ¥100 寻找技术员 云闪付tn转h5输入卡号付款的链接 重酬!
  • ¥15 sanf语句学习输入时遇到问题
  • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?