| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 660 人关注过本帖
标题:很诡异的事件。。。。
只看楼主 加入收藏
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:10 
很诡异的事件。。。。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>

typedef struct person       //通讯录结构中节点的定义
{
    char name[30];          //姓名
    char addr[30];          //地址
    char offphnum[15];      //办公电话
    char hmphnum[15];       //家庭电话
    char mbnub[15];         //移动电话
    struct person *next;
}listnode,*listlink;

struct add_person          //通讯录记录结构
{
    char name[30];
    char addr[30];
    char offphnum[15];
    char hmphnum[15];
    char mbnub[15];
};

listlink create();         //建立通讯录并将信息存入文件
listlink readfp();         //将文件的信息独处并转存如链表
void Show(listlink head);  //显示信息
void Delete(listlink head);//删除一条记录的信息
void Find(listlink head);  //查找记录
void Input(listlink head); //向通讯录加入一条记录
void Alter(listlink head); //修改一条记录的信息
void Save(listlink head);  //保存信息到文件

int main()
{ 
    listlink head=NULL;
    int n;
    head=readfp();
    if(head==NULL)
        head=create(head);
    while(1)
    {
        printf("------------------------------------\n");
        printf("请选择操作:1 显示所有  2 删除记录  \n");
        printf("            3 查询记录  4 插入新记录\n");
        printf("            5 修改记录  0 保存退出  \n");
        printf("请选择操作:");
        scanf("%d",&n);
        switch(n)
        {
            case 1:Show(head);break;
            case 2:Delete(head);break;
            case 3:Find(head);break;
            case 4:Input(head);break;
            case 5:Alter(head);break;
            case 0:Save(head);return 0;
        }
    }
    return 0;
}

//----------------------------建立通讯录
listlink create()
{
    listlink s;
    listlink head=NULL,end=NULL;
    printf("请输入信息(结束请在姓名处输入‘#’)\n\n");
    while(1)
    {
        s=(listlink)malloc(sizeof(listnode));
        printf("姓名:");
        scanf("%s",&s->name);
        if(strcmp(s->name,"#")==0) break;
        printf("地址:");
        scanf("%s",&s->addr);
        printf("办公电话:");
        scanf("%s",&s->offphnum);
        printf("家庭电话:");
        scanf("%s",&s->hmphnum);
        printf("移动电话:");
        scanf("%s",&s->mbnub);
        s->next=NULL;
        if(head==NULL)
            head=end=s;
        else
        {
            end->next=s;
            end=s;
        }
        printf("\n");
    }
    return (head);
}

//-----------------------------显示全部记录
void Show(listlink head)
{
    listlink p1;
    p1=head;
    while(p1!=NULL)
    {
        printf("姓名:%s\n",p1->name);
        printf("地址:%s\n",p1->addr);
        printf("办公电话:%s\n",p1->offphnum);
        printf("家庭电话:%s\n",p1->hmphnum);
        printf("移动电话:%s\n",p1->mbnub);
        p1=p1->next;
    }
}
//----------------------------将文件的信息读出并转存如链表中
listlink readfp()
{
    FILE *fp;
    struct add_person persons;
    listnode *s;
    listlink head=NULL,end=NULL;
    fp=fopen("people.txt","rb");
    if(fp==NULL)
    {
        printf("cannot open file!\n");
        return head;
    }
    fread(&persons,sizeof(struct add_person),1,fp);
    while(!feof(fp))
    {
        s=(listnode *)malloc(sizeof(listnode));    //存入链表中
        strcpy(s->name,persons.name);
        strcpy(s->addr,persons.addr);
        strcpy(s->offphnum,persons.offphnum);
        strcpy(s->hmphnum,persons.hmphnum);
        strcpy(s->mbnub,persons.mbnub);
        s->next=NULL;
        if(head==NULL)                             //尾插法将其插入链表中
            head=end=NULL;
        else
        {
            end->next=s;
            end=s;
        }
        fread(&persons,sizeof(struct add_person),1,fp);
    }
    return head;
}

//-------------------------------------将信息保存到文件中
void Save(listlink head)
{
    FILE *fp;
    static struct add_person persons;
    listlink p;
    fp=fopen("people.txt","wb");
    p=head;
    while(p!=NULL)
    {
        strcpy(persons.name,p->name);
        strcpy(persons.addr,p->addr);
        strcpy(persons.offphnum,p->offphnum);
        strcpy(persons.hmphnum,p->hmphnum);
        strcpy(persons.mbnub,p->mbnub);
        fwrite(&persons,sizeof(struct add_person),1,fp);
    }
    fclose(fp);
}

//----------------------------------删除一条记录
void Delete(listlink head)
{
    listlink p1,p2;
    char Name[10];
    p1=p2=head;
    if(p1==NULL)
    {
        printf("没有记录!\n");
        return ;
    }
    printf("请输入要删除人的姓名:");
    scanf("%s",&Name);
    while(strcmp(p1->name,Name)!=0&&p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }
    if(strcmp(p1->name,Name)==0)
    {
        if(p1==head)
            p1=p1->next;
        else
            p2->next=p1->next;
        free(p1);
    }
    else
        printf("要删除的记录不存在!\n");
}

//--------------------------------------查找指定记录
void Find(listlink head)
{
    listlink p1;
    char Name[10];
    int k=1;
    while(k)
    {
        p1=head;
        printf("请输入要查找人的姓名:");
        scanf("%s",&Name);
        while(strcmp(Name,p1->name)!=0&&p1->next!=NULL)
        {
            p1=p1->next;
        }
        if(strcmp(Name,p1->name)!=0)
            printf("要查找的记录不存在!\n");
        else
        {
            printf("姓名:%s\n",p1->name);
            printf("地址:%s\n",p1->addr);
            printf("办公电话:%s\n",p1->offphnum);
            printf("家庭电话:%s\n",p1->hmphnum);
            printf("移动电话:%s\n",p1->mbnub);
        }
        printf("是否继续?(Y/N)");
        if(getchar()!='Y'||getchar()!='y')
            k=0;
    }
}

//------------------------------------------向通讯录中插入新的记录
void Input(listlink head)
{
    int k=1;
    listlink s,end;
    end=head;
    while(k)
    {
        s=(listlink)malloc(sizeof(listnode));
        while(end->next!=NULL)
            end=end->next;
        printf("姓名:");
        scanf("%s",&s->name);
        printf("地址:");
        scanf("%s",&s->addr);
        printf("办公电话:");
        scanf("%s",&s->offphnum);
        printf("家庭电话:");
        scanf("%s",&s->hmphnum);
        printf("移动电话:");
        scanf("%s",&s->mbnub);
        s->next=NULL;
        end->next=s;
        s=end;
        printf("是否继续?(Y/N)");
        if(getchar()!='Y'||getchar()!='y')
            k=0;
    }

 
}

//-----------------------------------------修改一条记录的信息
void Alter(listlink head)
{
    listlink p=head;
    char pname[10];
    printf("请输入要修改人的姓名:");
    scanf("%s",&pname);
    while(strcmp(pname,p->name)!=0&&p->next!=NULL)
        p=p->next;
    if(strcmp(pname,p->name)!=0)
    {
        printf("没有要修改人的记录!\n");
        return;
    }
    else
    {
        printf("请输入要修改的信息!\n");
        printf("姓名:");
        scanf("%s",&p->name);
        printf("地址:");
        scanf("%s",&p->addr);
        printf("办公电话:");
        scanf("%s",&p->offphnum);
        printf("家庭电话:");
        scanf("%s",&p->hmphnum);
        printf("移动电话:");
        scanf("%s",&p->mbnub);
    }

}


今天写了一个通讯录,运行后输入数据,保存。。
但是产生的文件 竟然有1.86G!!
很是无语啊。。谁知道怎么回事??
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 bccn_2012 于 2011-6-11 19:23 编辑 ]
2011-06-11 19:17
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
那是你的文件写入操作进入死循环了  也就是不停的往里面写入数据

你这东西可以当病毒了

                                         
===========深入<----------------->浅出============
2011-06-11 19:30
Qingtian_2
Rank: 2
来 自:天津
等 级:论坛游民
帖 子:50
专家分:96
注 册:2011-3-9
收藏
得分:5 
确实很牛X,垃圾的杀毒软件被报警?质疑中
2011-06-11 19:34
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:5 
//-------------------------------------将信息保存到文件中
void Save(listlink head)
{
    FILE *fp;
    static struct add_person persons;
    listlink p;
    fp=fopen("people.txt","wb");
    p=head;
    while(p!=NULL)
    {
        strcpy(persons.name,p->name);
        strcpy(persons.addr,p->addr);
        strcpy(persons.offphnum,p->offphnum);
        strcpy(persons.hmphnum,p->hmphnum);

        strcpy(persons.mbnub,p->mbnub);
        fwrite(&persons,sizeof(struct add_person),1,fp);
        p=p->next;
   }
     fclose(fp);
}


[ 本帖最后由 cosdos 于 2011-6-11 19:46 编辑 ]

—>〉Sun〈<—
2011-06-11 19:39
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
删除联系人功能有问题

—>〉Sun〈<—
2011-06-11 19:56
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
刚写完,还没调试过。。就这样了。
2011-06-11 22:31
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 3楼 Qingtian_2
报警倒是没报,不过屏幕被卡死。。。
2011-06-11 22:33
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 5楼 cosdos
嗯,我也发现了。。。
2011-06-11 22:52
bccn_2012
Rank: 6Rank: 6
等 级:侠之大者
帖 子:158
专家分:447
注 册:2011-5-14
收藏
得分:0 
回复 5楼 cosdos
嗯,我也发现了。。。
2011-06-11 22:52
liangjinchao
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:376
专家分:697
注 册:2010-11-8
收藏
得分:5 
程序代码:
//-------------------------------------将信息保存到文件中
void Save(listlink head)
{
    FILE *fp;
    static struct add_person persons;
    listlink p;
    fp=fopen("people.txt","wb");
    p=head;
    while(p!=NULL)// 死循环了!
    {
        strcpy(persons.name,p->name);
        strcpy(persons.addr,p->addr);
        strcpy(persons.offphnum,p->offphnum);
        strcpy(persons.hmphnum,p->hmphnum);
        strcpy(persons.mbnub,p->mbnub);
        fwrite(&persons,sizeof(struct add_person),1,fp);
    }
    fclose(fp);
}

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2011-06-11 22:53
快速回复:很诡异的事件。。。。
数据加载中...
 
   



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

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