| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 331 人关注过本帖
标题:求高手指导文件读取问题
只看楼主 加入收藏
腹黑伸手党
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-10-27
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
求高手指导文件读取问题
程序代码:

     #include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TYPE struct Chose
#define endinput printf("输入0,0结束")
TYPE
{
    int num;
    float price;
    TYPE * next;
};

int n;

void menu()
{
    printf("提示:\n");
    printf("1.首次输入:\n");
    printf("2.补充输入:\n");
    printf("3.存盘:\n");
    printf("4.读取:\n");
    printf("5.删除:\n");
    printf("6.修改:\n");
    printf("7.退出:\n");
}

void save(TYPE * head)
{
    FILE * fp;
    TYPE * p;
    if((fp=fopen("mk.txt","w"))==NULL)
    {
        printf("cannot open infile\n");
        exit(0);
    }
    for(p=head;p!=NULL;p=p->next)
    {
        if((fprintf(fp,"%d,%f",p->num,p->price)!=1))
            printf("file write error\n");
    }
    fclose(fp);
   
}


void load(TYPE * head)
{
    FILE * fp;
    TYPE u[20];
    TYPE * p;
    int i;
    if((fp=fopen("mk.txt","r"))==NULL)
    {
        printf("cannot open infile\n");
        exit(0);
    }
    p=head;
    for(i=0;i<100;i++)
    {
        fscanf(fp,"%d,%f",&u[i].num,&u[i].price);
        if(u[i].num='\0')
            break;
        p->num=u[i].num;
        p->price=u[i].price;
        p=p->next;
    }
    p->next=NULL;
}
    



/*TYPE * load()
{
    FILE * fp;
    TYPE * p,* q,* head;
    int c=0;
    if((fp=fopen("mk.txt","r"))==NULL)
    {
        printf("cannot open infile\n");
        exit(0);
    }
    q=p=(TYPE *)malloc(sizeof (TYPE));
    fscanf(fp,"%d,%f",&q->num,&q->price);
    printf("1");
    head=NULL;
    while(q->num!=0)
    {
        c=c+1;
        if(c==1) head=q;
        else p->next=q;
        p=q;
        q=(TYPE *)malloc(sizeof (TYPE));
        fscanf(fp,"%d,%f",&q->num,&q->price);
    }
    p->next=NULL;
    fclose(fp);
    return(head);
}*/

/*
    for(p=head;p!=NULL;p=p->next)
    {
        if((fscanf(fp,"%d号菜,价格:%f\n",p->num,p->price)!=1))
            printf("file write error\n");
        fclose(fp);
    }
*/


TYPE * creat()
{
    TYPE * head;
    TYPE * p1,* p2;
    n=0;
    p1=p2=(TYPE *)malloc(sizeof (TYPE));
    scanf("%d,%f",&p1->num,&p1->price);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1) head=p1;
        else p2->next=p1;
        p2=p1;
        p1=(TYPE *)malloc(sizeof (TYPE));
        scanf("%d,%f",&p1->num,&p1->price);
    }
    p2->next=NULL;
    return(head);
}


   
void main()
{
    TYPE *p,*t,*head,*q;
    int i=1,k;
    float b;
    while(i)
    {
        menu();
        scanf("%d",&i);
        switch(i)
        {
        case 1:
            printf("输入菜的编码和价格(num,price)\n");
            //endinput;
            head=creat();
            for(p=head;p!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;
       
        case 2:
            printf("补充菜的编码与价格(num,price)\n");
            for(p=head;p!=NULL;p=p->next)
            {
                if(p->next==NULL)
                    break;
            }
            t=(TYPE * )malloc(sizeof (TYPE));
            scanf("%d,%f",&t->num,&t->price);
            p->next=t;
            p=t;
            p->next=NULL;
            for(p=head;p!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;

        case 3:save(head);
            //save();
            break;

        case 4:load(head);
            for(p=head;p!=NULL;p=p->next)
            {
                printf("%d,%f\n",p->num,p->price);
            }
            break;


        case 5:
            printf("需要删除的菜的编号(num)\n");
            scanf("%d",&k);
            for(p=head;p!=NULL;q=p,p=p->next)
            {
                if(p->num==k)
                    break;
            }
            if(p->next!=NULL)
            {
                q->next=p->next;
                free(p);
            }
            else
            {
                q->next=NULL;
                free(p);
            }
            for(p=head;p!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;


        case 6:
            printf("需要修改的菜和的编号(num)\n");
            scanf("%d",&k);
            printf("需要修改的菜和的价格(price)\n");
            scanf("%f",&b);
            for(p=head;p!=NULL;p=p->next)
            {
                if(p->num==k)
                    break;
            }
            p->price=b;
             for(p=head;p!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;

        case 7:
            printf("退出\n");
            i=0;
            break;

        default:
            printf("没有此选项~\(≧▽≦)/~啦啦啦\n");
        }
    }
    printf("欢迎使用,再见!=v=\n");
}
    

        


        

 
        
 
我写了一个菜单程序,发现存入文件和读取文件时总是发生错误,不知道错在哪,求各位高手大大帮忙。。。。
程序写得很烂。。。求包涵。。。


[ 本帖最后由 腹黑伸手党 于 2011-12-30 21:44 编辑 ]
搜索更多相关主题的帖子: price 
2011-12-30 21:42
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
问题点数:20  ..........

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-12-30 21:48
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
收藏
得分:20 
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TYPE struct Chose
#define endinput printf("输入0,0结束")
TYPE
{
    int num;
    float price;
    TYPE * next;
};

int n;

void menu()
{
    printf("提示:\n");
    printf("1.首次输入:\n");
    printf("2.补充输入:\n");
    printf("3.存盘:\n");
    printf("4.读取:\n");
    printf("5.删除:\n");
    printf("6.修改:\n");
    printf("7.退出:\n");
}

void save(TYPE * head)
{
    FILE * fp;
    TYPE * p;
    if((fp=fopen("mk.txt","w"))==NULL)
    {
        printf("cannot open infile\n");
        exit(0);
    }
    for(p=head;p!=NULL;p=p->next)
    {
        if((fprintf(fp,"%7d,%7.2f",p->num,p->price))<0) //fprintf()若成功则返回输出字符数,若输出出错则返回负值
            printf("file write error\n");
    }
    fclose(fp);
    
}

TYPE * creat()
{
    TYPE * head;
    TYPE * p1,* p2;
    n=0;
    p1=p2=(TYPE *)malloc(sizeof (TYPE));
    scanf("%d,%f",&p1->num,&p1->price);
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1) head=p1;
        else p2->next=p1;
        p2=p1;
        p1=(TYPE *)malloc(sizeof (TYPE));
        scanf("%d,%f",&p1->num,&p1->price);
    }
    p2->next=NULL;
    return(head);
}

void load(TYPE ** head) //接收指针的地址要用二级指针
{
    FILE * fp;
//    TYPE u[20];
    TYPE * p, *q;
//   int i;
    if((fp=fopen("mk.txt","r"))==NULL)
    {
        printf("cannot open infile\n");
        exit(0);
    }
    q=*head= (TYPE *)malloc(sizeof(TYPE));
    /*
    for(i=0;i<100;i++)
    {
    fscanf(fp,"%d,%f",&u[i].num,&u[i].price);
    if(u[i].num='\0')
    break;
    p->num=u[i].num;
    p->price=u[i].price;
    p=p->next;
    }
    p->next=NULL;
    
    */
    while(!feof(fp)) //判断是否到文件尾部
    {
        fscanf(fp, "%d,%f", &(q->num), &(q->price));
        p = (TYPE *)malloc(sizeof(TYPE));
        if(!p)
            exit(1);
        q->next = p;
        q = p;
    }
    q->next = NULL;
}



void main()
{
    TYPE *p,*t,*head,*q;
    int i=1,k;
    float b;
    while(i)
    {
        menu();
        scanf("%d",&i);
        switch(i)
        {
        case 1:
            printf("输入菜的编码和价格(num,price)\n");
            //endinput;
            head=creat();
            for(p=head;p->next!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;
            
        case 2:
            printf("补充菜的编码与价格(num,price)\n");
            for(p=head;p->next!=NULL;p=p->next)
            {
                if(p->next==NULL)
                    break;
            }
            t=(TYPE * )malloc(sizeof (TYPE));
            scanf("%d,%f",&t->num,&t->price);
            p->next=t;
            p=t;
            p->next=NULL;
            for(p=head;p->next!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;
            
        case 3:save(head);
            free(head);
            //save();
            break;
            
        case 4:
            load(&head); //要改变指针的值要传递指针的地址
            for(p=head;p->next!=NULL;p=p->next)
            {
                printf("%7d,%7.2f\n",p->num,p->price);
            }
            break;
            
            
        case 5:
            printf("需要删除的菜的编号(num)\n");
            scanf("%d",&k);
            for(p=head;p!=NULL;q=p,p=p->next)
            {
                if(p->num==k)
                    break;
            }
            if(p == NULL)
            {
                printf("没有找到要删除的菜!\n");
            }
            if(p == head)
            {
                head=p->next;
                free(p);
            }
            else
            {
                q->next=p->next;
                free(p);
            }
            for(p=head;p->next!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;
            
            
        case 6:
            printf("需要修改的菜和的编号(num)\n");
            scanf("%d",&k);
            printf("需要修改的菜和的价格(price)\n");
            scanf("%f",&b);
            for(p=head;p->next!=NULL;p=p->next)
            {
                if(p->num==k)
                    break;
            }
            p->price=b;
            for(p=head;p->next!=NULL;p=p->next)
            {
                printf("%d号菜,价格:%f\n",p->num,p->price);
            }
            break;
            
        case 7:
            printf("退出\n");
            i=0;
            break;
            
        default:
            printf("没有此选项~\(≧▽≦)/~啦啦啦\n");
        }
    }
    printf("欢迎使用,再见!=v=\n");
}


[ 本帖最后由 liao06550107 于 2011-12-31 00:53 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2011-12-31 00:52
腹黑伸手党
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-10-27
收藏
得分:0 
回复 3楼 liao06550107
谢谢指点~
2011-12-31 12:06
快速回复:求高手指导文件读取问题
数据加载中...
 
   



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

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