读书人

求们看看哪里出有关问题了

发布时间: 2012-04-06 12:22:24 作者: rapoo

求大虾们看看哪里出问题了
今年大一刚开始学C语言,写了一个记账的程序,但一直编译不成功。开始编了,用顺序方式的可以运行,但换了链表后就编译不行了,求看看哪里出问题,,
谢谢谢谢!!!

C/C++ code
#include<stdio.h>#include<stdlib.h>#include<string.h>struct Money{    int num;    char date[20];    int mon;    char used[80];    struct Money *next;}index,*first;void Add();void show();void Delete_1();void exito();void input(struct Money*p)void printf_menu();void Add(){    char check;    struct Money *p=(struct Money*)malloc(sizeof(struct Money));    struct Money *last;    if(first==NULL)        first=p;    else     {        last=getlast(*first);        last->next=p;    }    input(*p);    printf("是否继续输入?Y是,N不是");    scanf("%c",&check);    if(check=='Y'||check=='y')Add();    else printf_menu();}void Delete_1(){    int num_no;    int count=0;    struct Money *p=first;    printf("请输入要删除的数据编号:");    scanf("%d",&num_no);    if(p->num==num_no)    {        first=first->next;        count=1;    }    else    {    while((p->next)!=NULL)    {        if(((p->next)->num)==num_no)        {            p->next=((p->next)->next);            count=1;            break;        }        p=p->next;    }    }    if(count==0)printf("编号%d不存在",num_no);    else printf("删除成功");    printf_menu();}void show(){    struct Money *p;    printf("+----+-------+------+-------------------------+");    printf("|编号| 日 期 | 金 额|     使用原因            |");    printf("+----+-------+------+-------------------------+");    p=first;    while(p!=NULL)    {        printf("|%d|%s|%d|%s|",p->num,p->date,p->mon,p->used);        printf("+----+-------+------+-------------------------+");        p=p->next;    }    printf_menu();}void exito(){    struct Money *p;    p=first;    while(p!=NULL)    {        free(p);        p=p->next;    }    exit(0);}struct Money * getlast(struct Money *p){    while(p!=NULL)    {        p=p->next;    }    return(p);}void input(struct Money *p){    int num_no,count=0;    struct Money *p1;    do {    printf("请输入编号:");    scanf("%d",&num_no);    p1=first;    if(p1->num==num_no)printf("编号存在,请重新输入");    else count=1;    p1=p1->next;    }while(count==0);    p->num=num_no;    printf("请输入日期:(格式年-月-日)");    scanf("%s",p->date);    printf("请输入使用金额:");    scanf("%d",&p->mon);    printf("请输入使用原因:");    scanf("%s",p->used);    p->next=NULL;}void printf_menu(){    int id_choose;    printf("+------------------------------------+\n");    printf("|                                    |\n");    printf("+------------------------------------+\n");    printf("|1.添加数据 (Add)                    |\n");    printf("+------------------------------------+\n");    printf("|2.删除数据 (Delete)                 |\n");    printf("+------------------------------------+\n");    printf("|3.展示数据 (Show)                   |\n");    printf("+------------------------------------+\n");    printf("|4.退出系统 (Exit)                   |\n");    printf("+------------------------------------+\n");        scanf("%d",&id_choose);    while(id_choose>4||id_choose<1)    {        printf("输入错误,请重新输入1-4\n");        scanf("%d",&id_choose);    }    switch(id_choose)    {    case 1:Add();break;    case 2:Delete_1();break;    case 3:show();break;    case 4:exito();break;    }}int main(){    printf_menu();}




[解决办法]
C/C++ code

#include<stdio.h>#include<stdlib.h>#include<string.h>struct Money{    int num;    char date[20];    int mon;    char used[80];    struct Money *next;}index,*first;void Add();void show();void Delete_1();void exito();void input(struct Money*p);void printf_menu();struct Money * getlast(struct Money *p);void Add(){    char check;    struct Money *p=(struct Money*)malloc(sizeof(struct Money));    struct Money *last;    if(first==NULL)        first=p;    else     {        last=getlast(first);        last->next=p;    }    input(p);    printf("是否继续输入?Y是,N不是");    scanf(" %c",&check);    if(check=='Y'||check=='y')Add();    else printf_menu();}void Delete_1(){    int num_no;    int count=0;    struct Money *p=first;    printf("请输入要删除的数据编号:");    scanf("%d",&num_no);    //这里是否该增加一个判断链表是否为空的语句?以防止无数据时删除,产生错误    if(p->num==num_no)    {        first=first->next;        count=1;    }    else    {    while((p->next)!=NULL)    {        if(((p->next)->num)==num_no)        {            p->next=((p->next)->next);            count=1;            break;        }        p=p->next;    }    }    if(count==0)printf("编号%d不存在",num_no);    else printf("删除成功");    printf_menu();}void show(){    struct Money *p;    printf("+----+-------+------+-------------------------+");    printf("|编号| 日 期 | 金 额|     使用原因            |");    printf("+----+-------+------+-------------------------+");    p=first;    while(p!=NULL)    {        printf("|%d|%s|%d|%s|",p->num,p->date,p->mon,p->used);        printf("+----+-------+------+-------------------------+");        p=p->next;    }    printf_menu();}void exito(){    struct Money *p;    p=first;    while(p!=NULL)    {        free(p);        p=p->next;    }    exit(0);}struct Money * getlast(struct Money *p){    while(p!=NULL)    {        p=p->next;    }    return(p);}void input(struct Money *p){    int num_no,count=0;    struct Money *p1;    do {    printf("请输入编号:");    scanf(" %d",&num_no);    p1=first;    if(p1->num==num_no)printf("编号存在,请重新输入");    else count=1;    p1=p1->next;    }while(count==0);    p->num=num_no;    printf("请输入日期:(格式年-月-日)");    scanf(" %s",p->date);    printf("请输入使用金额:");    scanf(" %d",&p->mon);    printf("请输入使用原因:");    scanf(" %s",p->used);    p->next=NULL;}void printf_menu(){    int id_choose;    printf("+------------------------------------+\n");    printf("|                                    |\n");    printf("+------------------------------------+\n");    printf("|1.添加数据 (Add)                    |\n");    printf("+------------------------------------+\n");    printf("|2.删除数据 (Delete)                 |\n");    printf("+------------------------------------+\n");    printf("|3.展示数据 (Show)                   |\n");    printf("+------------------------------------+\n");    printf("|4.退出系统 (Exit)                   |\n");    printf("+------------------------------------+\n");        scanf("%d",&id_choose);    while(id_choose>4 || id_choose<1)    {        printf("输入错误,请重新输入1-4\n");        scanf(" %d",&id_choose);    }    switch(id_choose)    {    case 1:Add();break;    case 2:Delete_1();break;    case 3:show();break;    case 4:exito();break;    }}int main(){    printf_menu();} 

读书人网 >C语言

热点推荐