| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1510 人关注过本帖
标题:结构体数组 使用 fwrite 重新覆盖写入 编译通过,程序就执行到这一步,就错 ...
只看楼主 加入收藏
lyf4089835
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-6-4
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:8 
结构体数组 使用 fwrite 重新覆盖写入 编译通过,程序就执行到这一步,就错误了
程序代码:
# include <stdio.h>
# include <stdlib.h>
# include <windows.h>
# include <string.h>


struct Employee
{
    char name[20];
    char sex[5];
    char deparment[20];
    double pay;
    
};

void SaveEmp(struct Employee[],int,int);//保存员工数据
void LoadEmp(struct Employee[],int *);//载入员工数据
void Result(struct Employee[],int *);//浏览员工信息
void Revise(struct Employee[],int *);//修改员工信息

void NewSaveEmp(struct Employee[],int);//覆盖保存数据

void NewSaveEmp(struct Employee emp[],int emp_number)
{
    FILE * fp;
    int i = 0;
    fopen("emp.dat", "wb");
    for(i = 0;i < emp_number; i++)
    {
        if(fwrite(&emp[i], sizeof(struct Employee), 1, fp) != 1 )
        {
            printf("写入失败!\n");
        }
        
    }
    fclose(fp);
}

void LoadEmp(struct Employee emp[],int * emp_number)
{
    FILE * fp;
    int i = 0;
    if((fp = fopen("emp.dat","rb"))==NULL)
    {
        printf("无法打开员工数据文件\n");
        exit(0);
    }

    while (fread(&emp[i], sizeof(struct Employee), 1, fp) == 1 && i < 50)
    {
        i++;
    }

    * emp_number = i;
    if (feof(fp))
    {
        fclose(fp);
    }

}


void Result(struct Employee emp[],int * emp_number)
{

    system("cls");
    system("title 员工信息");
    printf("\n\n\n\n\t\t读取中...");
    Sleep(2000);
    system("cls");
    LoadEmp(emp,emp_number);
    printf("\n\n\t\t员工信息:\n\n\n");
    printf("\t\t姓名        性别        部门      工资");
    for (int i = 0; i < * emp_number; i++)
    {
        
         printf("\n\n\t\t%-10s  %-10s %-10s %-15.2f",emp[i].name,emp[i].sex,emp[i].deparment,emp[i].pay);
         printf("\n\n");
    }
    printf("\n\n\n");
    system("pause");
    
}

void Revise(struct Employee emp[],int * emp_number)
{
    int i,find = 0;
    char str[20];
    char c,ch = 'y';
    system("cls");
    system("title 修改信息");
    fflush(stdin);
    LoadEmp(emp,emp_number);
    printf("\n\t\t--------------------修改员工信息------------------\n");
    while ((ch=='y')||(ch=='Y'))
    {
        printf("\n\n\t\t请输入员工的姓名:");
        scanf("%s",str);
    
        for (i = 0;i < * emp_number;i++)
        {
            if (strcmp(str, emp[i].name) == 0)
            {
                printf("\n\n\t\t您要修改的员工信息为:\n\n\n");
                printf("\t\t姓名        性别        部门      工资");
                printf("\n\n\t\t%-10s  %-10s %-10s %-15.2f",emp[i].name,emp[i].sex,emp[i].deparment,emp[i].pay);
                find = 1;
                break;
            }
        }
        fflush(stdin);

        if (find = 1)
        {
            printf("\n\n\t\t请重新输入修改的员工信息为:\n\n\n");
            
            printf("\n\t\t员工的姓名:");
            scanf("%s",emp[i-1].name);
            printf("\n\t\t员工的性别:");
            scanf("%s",emp[i-1].sex);
            printf("\n\t\t员工的部门:");
            scanf("%s",emp[i-1].deparment);
            printf("\n\t\t员工的工资:");
            scanf("%lf",&emp[i-1].pay);
            fflush(stdin);
            printf("\n\t\t是否继续修改员工信息(y/n)?:");
            scanf("%c",&ch);
            fflush(stdin);
        }
        else
        {
            printf("\n\t\t输入的名字错误!\n");

        }
    }
    NewSaveEmp(emp,* emp_number);//重新生成数据文件
    system("cls");
    
    system("pause");
    

}

    
int main(void)
{
    struct Employee emp[50];
    int choose,emp_number = 0;
        Revise(emp,&emp_number);
        Result(emp,&emp_number);
            

    return 0;
}
        
搜索更多相关主题的帖子: 结构体 
2014-06-04 09:35
lyf4089835
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-6-4
收藏
得分:0 
来帮忙 看看  好几天了 一直不知道是哪的问题
2014-06-04 09:36
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:20 
看一下vs 提示的警告信息  通常情况下 警告信息和错误信息区别也不太大

warning C4700: 使用了未初始化的局部变量“fp”


具体影响代码在这里:

void NewSaveEmp(struct Employee emp[],int emp_number)
{
    FILE * fp;
    int i = 0;
    fopen("emp.dat", "wb");
    for(i = 0;i < emp_number; i++)
    {
       if(fwrite(&emp[i], sizeof(struct Employee), 1, fp) != 1 )
        {
            printf("写入失败!\n");
        }
        
    }
    fclose(fp);
}

DO IT YOURSELF !
2014-06-04 09:51
lyf4089835
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-6-4
收藏
得分:0 
回复 3 楼 wp231957
未初始化? 文件指针 怎么初始化。。。。
2014-06-04 10:08
砖家的谎言
Rank: 12Rank: 12Rank: 12
等 级:禁止访问
威 望:30
帖 子:693
专家分:3898
注 册:2013-12-6
收藏
得分:0 
感觉这里应该不需要初始化吧

我不是砖家,要努力成为砖家。
2014-06-04 10:10
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这????无语了  你看看你的fp等于什么就可以了

DO IT YOURSELF !
2014-06-04 10:11
lyf4089835
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-6-4
收藏
得分:0 
回复 6 楼 wp231957
我是新手 不好意思 说得明白一些 谢谢了。。。
2014-06-04 10:18
lyf4089835
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-6-4
收藏
得分:0 
回复 5 楼 砖家的谎言
您是指 不定义 FILE *fp?
2014-06-04 10:18
lyf4089835
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2014-6-4
收藏
得分:0 
我草。。我解决了  不好意思。。。。。。。。
2014-06-04 10:24
快速回复:结构体数组 使用 fwrite 重新覆盖写入 编译通过,程序就执行到这一步 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020257 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved