| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2024 人关注过本帖
标题:新人求助,检查了两个小时了!
只看楼主 加入收藏
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
新人求助,检查了两个小时了!
int save(int g)//数组大小
{
    int i;
    FILE *fp;
    if((fp=fopen("St.dat","wb")==NULL))
    {
        printf("无法打开此文件!\n");
        return;
    }
    for(i=0;i<g;i++)
    {
        if(fwrite(&St[i],sizeof(struct Staff),1,fp)!=1)
        printf("文件出错!");
    }
    fclose(fp);
}
这是一个存储数组的函数
运行以后,出错。
调试,停在这儿if(fwrite(&St[i],sizeof(struct Staff),1,fp)!=1)
谁能告诉我问题啊!
搜索更多相关主题的帖子: return 
2017-06-13 10:34
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
St这个数组的定义在哪儿?

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 10:37
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
收藏
得分:0 
回复 2楼 renkejun1942
这是一个数组,已经定义过了。
struct Date
{
    char Month[3];
    char Day[3];
    char Year[5];
};
struct Staff
{
    char No[6];/*职工号*/
    char Name[10];/*姓名*/
    int Sex;/*性别*/
    struct Date Birthday;/*出生年月*/
    char Education[10];/*学历*/
    char Duty[10];/*职务*/
    int Salary;/*工资*/
    char Address[10];/*住址*/
    char Tel[12];/*电话*/
    /*其他*/
}St[2000];
2017-06-13 10:38
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<string.h>
struct Date
{
    char Month[3];
    char Day[3];
    char Year[5];
};
struct Staff
{
    char No[6];/*职工号*/ 
    char Name[10];/*姓名*/ 
    int Sex;/*性别*/ 
    struct Date Birthday;/*出生年月*/ 
    char Education[10];/*学历*/ 
    char Duty[10];/*职务*/ 
    int Salary;/*工资*/ 
    char Address[10];/*住址*/ 
    char Tel[12];/*电话*/ 
    /*其他*/
}St[2000];
int initial()/*读文件记录到数组,同时记录文件记录个数*/
{
    int i=0,j;
    FILE *fp;
    if((fp=fopen("St.dat","rb"))==NULL)
    {
        printf("不能打开文件\n");
        exit(0);
    }
    i=0;
    while(1)
    {
        fread(&St[i],sizeof(struct Staff),1,fp);
        if(!feof(fp))
        {
            /*printf("%10d%10s%2d%5d%3d%3d%10s%10s%8s%10s%15s",St[i].No,St[i].Name,St[i].Sex,
             St[i].Birthday.Year,St[i].Birthday.Month,St[i].Birthday.Day,
             St[i].Education,St[i].Duty,St[i].Salary,St[i].Address,St[i].Tel);*/
            i++; 
        }
        else break;
    }
    fclose(fp);
    return(i);
} 
int save(int g)
{
    int i;
    FILE *fp;
    if((fp=fopen("St.dat","wb")==NULL))
    {
        printf("无法打开此文件!\n");
        return;
    }
    for(i=0;i<g;i++)
    printf("%-6s%-10s%-2d%-5s%-3s%-3s%-10s%-10s%-7d%-10s%-12s\n",St[i].No,St[i].Name,St[i].Sex,
             St[i].Birthday.Year,St[i].Birthday.Month,St[i].Birthday.Day,
             St[i].Education,St[i].Duty,St[i].Salary,St[i].Address,St[i].Tel);
    /*for(i=0;i<g;i++)
    {
        if(fwrite(&St[i],sizeof(struct Staff),1,fp)!=1)
        printf("文件出错!"); 
    }
    fclose(fp);*/
    for(i=0;i<g;i++)
    {
        if(fwrite(&St[i],sizeof(struct Staff),1,fp)!=1)////////我会出问题!!!!!!
            printf("文件出错!\n");
    }
    fclose(fp);
}
int main()
{
    int k;
    k=initial();
    save(k);    
}

这是一段测试代码,还是在同样的地方出问题。

[此贴子已经被作者于2017-6-13 10:46编辑过]

2017-06-13 10:43
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:20 
if((fp=fopen("St.dat","wb")==NULL))//这一行的括号匹配有错 应该是 if( ( fp = fopen( "St.dat", "wb") ) == NULL )


[此贴子已经被作者于2017-6-13 10:50编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 10:46
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
收藏
得分:0 
等等我去运行一下。

[此贴子已经被作者于2017-6-13 10:50编辑过]

2017-06-13 10:48
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 6楼 ssl002
括号不匹配。你看楼上的注释。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 10:49
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
程序代码:
    if((fp=fopen("St.dat","wb")==NULL))
    {
        printf("无法打开此文件!\n");
        return;//这里也有错,按照你的写法应该是 return 返回值。 然而更好的写法是 exit( EXIT_FAILURE )
    }

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 10:51
ssl002
Rank: 2
等 级:论坛游民
威 望:2
帖 子:75
专家分:43
注 册:2017-6-13
收藏
得分:0 
哇,自己看了3个小时,大神,膜拜。
2017-06-13 10:53
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 9楼 ssl002
编译一下看错误提示,很容易,但是肉眼很难查,括号匹配问题我当时看你主楼的代码也没看出来。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-13 10:54
快速回复:新人求助,检查了两个小时了!
数据加载中...
 
   



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

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