| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1300 人关注过本帖
标题:一用修改功能就出现 内存不能为written,怎么调试呢?
只看楼主 加入收藏
ljx19901221
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-16
结帖率:0
收藏
已结贴  问题点数:10 回复次数:6 
一用修改功能就出现 内存不能为written,怎么调试呢?
我设计的是财务管理系统,可是用里面一个修改功能的时候中途就会出现”0x00401122“指令引用的"0x00000000"内存。改内存不能为:“written"。大概会在哪里出现问题呢?各位大大指导一下我这位菜鸟


// 家庭财务管理功能
#include<stdio.h>
#include<string.h>
#include<stdlib.h>


// 定义家庭财务信息结构体
struct fi_data{
    char time[12];
    char name[9];
    double money;
    char detail[11];
};

int Count=0; //定义全局变量,记录收入笔数
void menu(); //菜单函数
void add_income(struct fi_data data[]);
int  search_income(struct fi_data data[]);
void delete_income(struct fi_data data[]);
void update_income(struct fi_data data[]);
void sort_income(struct fi_data data[]);
void quit();
void initialize();


  
void menu()
{
      printf("\n");
      printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t\t       家庭财务管理系统\n");
      printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t            ~~~~~~~~~~~~~~~~~~~~~~\n");
      printf("\t\t*******************************************\n");
      printf("\t\t收入管理:");
      printf("1.添加收入");
      printf("  2.查询收入明细\n");
      printf("\t\t\t 3.删除收入");
      printf("  4.修改收入\n");
      printf("  5.排序\n");
      printf("\t\t0.退出系统");

}

int main(void)
{
    int selected, n;
    struct fi_data d,data[50];                  /*财务数据架构*/
    FILE *fp;

    //////// 读文件数据   
    fp = fopen( "fi_info.txt","r" );
    if( fp != NULL )      // 打开文件
    {
        while( !feof( fp ) )
        {
            int x = fscanf( fp,"%s %s %lf %s",d.time,d.name,&d.money,d.detail);
            if( x > 0 )    data[ Count++ ]=d;
            else break;
        };
        fclose( fp );
    }
    //////////////////
    //没写这个主函数的返回类型
    system("cls");
    do
    {
        menu();
        printf(">请选择要进行的操作(0-4)");
        scanf( "%d", &selected );
        switch(selected)
        {
            case 1:add_income(data);break;
            case 2:search_income(data);break;
            case 3:delete_income(data);break;
            case 4:update_income(data);break;
            case 5:sort_income(data);break;
            case 0:break;
            default:
            printf(">输入有误!请选择(0-4)之间的数字!...");
            break;
        }
    }while(selected != 0); //-->这里少了条件,我不知道你要什么条件写了一
 
    printf("谢谢使用家庭财务管理系统!\n");


    ////////// 写文件
    fp = fopen( "fi_info.txt","w" );
    if(  fp != NULL )
    {
        for( n = 0; n < Count; n++ )
        {
            d = data[ n ];
            fprintf( fp, "%-6s %-10s %-10lf %-10s ", d.time,d.name,d.money,d.detail );
            if( n < Count - 1 ) fprintf( fp, "\n" );
        };
        fclose( fp );
    }
    //////////
    return 0;
}

//增加财务数据
void add_income(struct fi_data data[])
{
    struct fi_data d;
    printf("请输入年月(例如:2009/1:");
    scanf("%s",d.time);
    printf("请输入家庭成员姓名:");
    scanf("%s",d.name);
    printf("输入金额:");
    scanf("%lf",&d.money);
    printf(">请输入备注(最大长度为%d):",20);
    scanf("%s",d.detail);

    data[ Count ] = d;
    Count++;
}

//修改财务数据
void update_income(struct fi_data data[])
{
    int index;
    struct fi_data d;

    index=search_income(data);
    if( index < 0 || index > Count - 1 )
    {
        printf("没有这个数据!!\n");
        return;
    }
    printf("请输入新的年月:");
    scanf("%s",d.time);
    printf("请输入家庭成员姓名:");
    scanf("%s",d.name);
    printf("请输入金额:");
    scanf("%s",d.money);
    printf("请输入备注:");
    scanf("%s",d.detail);
   
    data[Count++]=d;
    printf( "\n修改成功!\n" );
}

//删除财务数据
void delete_income(struct fi_data data[])
{
    int index,i;

    index=search_income(data);

    if(index<0||index > Count-1)
    {
        printf("财务管理系统资料库为空!\n");
        return;
    }

    for(i=index;i<Count-1;i++)    data[i]=data[i+1];

    Count--;
    printf( "删除成功!" );

}

//查询财务数据
int search_income(struct fi_data data[])
{
    int i,flag=0,index=-1;
    char time[20];

    if(Count==0){
        printf("财务数据是空的!\n");
        return index;
    }

    printf( "\n请输入查询时间条件:" );
    scanf( "%s", time );

    for(i=0;i<Count;i++)
    {
        if( strcmp( time, data[i].time) == 0 )
        {
            flag=1;
            index=i;
            break;
        }
    }
    if( index < 0 )
    {
        printf( "查找不到指定资料!" );
    }else
    {
        printf( "..." );
    }

    return index;
}


//财务数据排序
void sort_income(struct fi_data data[])
{
    int i,j,index;
    struct fi_data temp;
    //按日期从前到后排序,使用顺序排序法
    for(i=0;i<Count-1;i++){
        index=i;
        for (j=i+1;j<Count;j++)
            if(data[j].time<data[index].time)   //比较日期的前后
            index=j;
            temp=data[index];
            data[index]=data[i];
            data[i]=temp;
    }
    printf("排序完毕!");
}
搜索更多相关主题的帖子: 财务管理 double 结构体 money 
2011-06-22 21:48
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:5 
scanf("%s",d.money);    // 错在这里
2011-06-22 21:51
waterstar
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:984
专家分:2810
注 册:2010-2-12
收藏
得分:5 
这属于粗心错误了,这种错误编译的时候不会提示,算是最难找的一种错误。

冰冻三尺,非一日之寒;士别三日,不足刮目相看!
2011-06-22 21:59
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 3楼 waterstar
其实也不难
2011-06-22 21:59
ljx19901221
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-16
收藏
得分:0 
回复 2楼 voidx
汗,不是把s改成lf吗?还是出现同样的问题哦
2011-06-22 22:03
voidx
Rank: 12Rank: 12Rank: 12
来 自:邯郸
等 级:火箭侠
帖 子:1250
专家分:3538
注 册:2011-4-7
收藏
得分:0 
回复 5楼 ljx19901221
还要加上 &

我觉得有点蛋疼
2011-06-22 22:07
ljx19901221
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-6-16
收藏
得分:0 
回复 6楼 voidx
实在不好意思,小生让你受苦了,这么简单个错误
2011-06-22 23:43
快速回复:一用修改功能就出现 内存不能为written,怎么调试呢?
数据加载中...
 
   



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

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