文件读入输出-c语言

输入职工信息,建立一个磁盘文件,再将职工名,工资另建一个简明的职工工资文件。
不知道哪里错了


#include 
#include 
struct employee{
    char name[20];
    int num;
    char sex;
    int age;
    char addr[20];
    float salary;
    char health[8];
    char education[10];
}person[2];
 int main(){
     //建立磁盘文件
     FILE *fp;
     if((fp=fopen("employee.dat","wb"))==NULL){
         printf("cannot open file\n");
         exit(0); 
     } 
     printf("enter :\n");
     int i;
     for(i=0;i<2;i++)
     scanf("%s%d%c%d%s%f%s%s",person[i].name,&person[i].num,&person[i].sex,&person[i].age,
     person[i].addr,&person[i].salary,person[i].health,person[i].education);
     //写入磁盘
     for(i=0;i<2;i++)
     fwrite(&person[i],sizeof(struct employee),1,fp);
     fclose(fp); //完毕
     
     struct employee person1[2];
     struct employee1{
         char name[20];
         float salary;
     }person2[2]; 
     //读出磁盘文件
     if((fp=fopen("employee.dat","rb"))==NULL){
         printf("cannot open file\n");
         exit(0);
     } 
     for(i=0;i<2;i++){
     fread(&person1[i],sizeof(struct employee),1,fp);
     strcpy(person2[i].name,person1[i].name);
     person2[i].salary=person1[i].salary;
 }
     fclose(fp);
     FILE *fp1;
     if((fp1=fopen("employee1.dat","wb"))==NULL){
         printf("cannot open file\n");
         exit(0);
     } 
     for(i=0;i<2;i++)
     fwrite(&person2[i],sizeof(struct employee1),1,fp);
     fclose(fp1);
     return 0;
 }

获取信息那里改一下,在%c之前增加一个空格,忽略输入中的空格;

然后增加打印文件信息的代码,以便检查输入的信息是否正确即可。

修改如下:

参考链接:



#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
struct employee{
    char name[20];
    int num;
    char sex;
    int age;
    char addr[20];
    float salary;
    char health[8];
    char education[10];
}person[2];
 int main(){
     //建立磁盘文件
     FILE *fp;
     if((fp=fopen("employee.dat","wb"))==NULL){
         printf("cannot open file\n");
         exit(0); 
     } 
     printf("enter :\n");
     int i;
     for(i=0;i<2;i++)
     // https://blog.csdn.net/weixin_45729253/article/details/103095937
     // %c前面增加一个空格,以便忽略输入的空格 
     scanf("%s%d %c%d%s%f%s%s",person[i].name,&person[i].num,&person[i].sex,&person[i].age,
     person[i].addr,&person[i].salary,person[i].health,person[i].education);
     //写入磁盘
     for(i=0;i<2;i++)
     fwrite(&person[i],sizeof(struct employee),1,fp);
     fclose(fp); //完毕
     
     struct employee person1[2];
     struct employee1{
         char name[20];
         float salary;
     }person2[2]; 
     //读出磁盘文件
     if((fp=fopen("employee.dat","rb"))==NULL){
         printf("cannot open file\n");
         exit(0);
     } 
     
     for(i=0;i<2;i++){
         fread(&person1[i],sizeof(struct employee),1,fp);
         // 增加打印文件信息的代码,以检查数据是否输入正确 
         printf("%s %d %c %d %s %f %s %s\n",person[i].name,person[i].num,person[i].sex,person[i].age,
         person[i].addr,person[i].salary,person[i].health,person[i].education);
         strcpy(person2[i].name,person1[i].name);
         person2[i].salary=person1[i].salary;
     } 
     fclose(fp);
     
     FILE *fp1;
     if((fp1=fopen("employee1.dat","wb"))==NULL){
         printf("cannot open file\n");
         exit(0);
     } 
     for(i=0;i<2;i++)
         fwrite(&person2[i],sizeof(struct employee1),1,fp);
     fclose(fp1);
     
     if((fp1=fopen("employee1.dat","rb"))==NULL){
         printf("cannot open file\n");
         exit(0);
     } 
    struct employee1 personRead[2];
     for(i=0;i<2;i++){
         fread(&personRead[i],sizeof(struct employee1),1,fp);
           // 增加打印文件信息的代码,以检查数据是否输入正确 
         printf("%s %f\n",personRead[i].name,personRead[i].salary);
     }
         
     fclose(fp1);
     
     return 0;
 }


img

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/179264
  • 这篇博客你也可以参考下:钢条切割问题,如果每次切割还要付出固定成本c和输出切割方案,解决思路和示例代码
  • 除此之外, 这篇博客: C语言编程规范 学习笔记中的 规则 10.6 在两个以上的关键字、变量、常量进行对等操作时,它们之间的操作符之前、之后或者前后要加空格; 进行非对等操作时,如果 是关系密切的立即操作符(如->),后不应加空格 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 说明:
    1)采用这种松散方式编写代码的目的是使代码更加清晰。
    2)在已经非常清晰的语句中没有必要再留空格,如括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C语言中括号已经是最清晰的标志了。
    3)在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。

    示例:
    1) 逗号、分号只在后面加空格
    	int a, b, c;
    2) 比较操作符, 赋值操作符"=""+=",算术操作符"+""%",逻辑操作符"&&""&",位域操作符"<<""^"等双目操作符的前后加空格。
    	if (current_time >= MAX_TIME_VALUE)
    	a = b + c;
    	a *= 2;
    	a = b ^ 2;
    3) "!""~""++""--""&"(地址操作符)等单目操作符前后不加空格。
    	*p = 'a';         // 内容操作"*"与内容之间
    	flag = !is_empty; // 非操作"!"与内容之间
    	p = &mem;         // 地址操作"&" 与内容之间
    	i++;              // "++","--"与内容之间
    4) "->""."前后不加空格。
    	p->id = pid; // "->"指针前后不加空格
    5) ifforwhileswitch等与后面的括号间应加空格,使if等关键字更为突出、明显。
    	if (a >= b && c > d)
    
  • 您还可以看一下 韦语洋(Lccee)老师的一机一码加密、被破解自动销毁随时授权回收升级系列视频课程课程中的 演示如何破解一个软件绕过注册机(仅作为后续课程的了解)小节, 巩固相关知识点