标题:麻烦大家帮我看一下,谢谢
只看楼主
白落虚
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-6-25
结帖率:100%
已结贴  问题点数:20 回复次数:3 
麻烦大家帮我看一下,谢谢
一共出现了下面这几个问题:
C:\Users\白落虚\Desktop\c.cpp(197) : error C2601: 'ChangeRecord' : local function definitions are illegal
C:\Users\白落虚\Desktop\c.cpp(240) : error C2601: 'menu' : local function definitions are illegal
C:\Users\白落虚\Desktop\c.cpp(250) : error C2601: 'main' : local function definitions are illegal
C:\Users\白落虚\Desktop\c.cpp(273) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.



#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct renshi{
    int num;//编号
    char name[20];//名称
    int jinjia;//进价
    int shoujia;//售价
    int jinhuoliang;//进货量
    int xiaoshouliang;//销售量
};
struct node{
    struct renshi data;
    struct node *next;
};
struct renshi s[50];
struct node *head,*tail;
void initial()
{
    head=(struct node*)malloc(sizeof(struct node));
    head->next=NULL;
    tail=head;
}
void ReadFromFile()//从特定文件中读入信息
{
    FILE *fp;
    printf("即将覆盖文件!\n");
    head->next=NULL;
    tail=head;
    if((fp=fopen("商品信息.txt","r"))==NULL)
    {
        printf("打开文件失败!\n按Enter键返回主菜单...");
        getchar();
        getchar();
        return;
    }
    while(!feof(fp))
    {
        tail->next=(struct node*)malloc(sizeof(struct node));
        tail=tail->next;
        fscanf(fp,"%d%s%d%d%d%d",&(tail->data.num),&(tail->data.name),&(tail->data.jinjia),&(tail->data.shoujia),&(tail->data.jinhuoliang)),&(tail->data.xiaoshouliang);
    }
    tail->next=NULL;
    fclose(fp);
    printf("载入成功!\n按Enter键返回主菜单...");
    getchar();
    getchar();
}
void WriteTofile()//将信息写入特定文件
{
    FILE *fp;
    struct node *p;
    char ch;
    printf("是否覆盖原文件?[Y/N]:");
    scanf("%s",&ch);
    switch(ch)
    {
    case 'Y':case 'y':break;
    default :return;
    }
    if((fp=fopen("商品信息(新).txt","w+"))==NULL)
    {
        printf("打开文件失败!\n按Enter键返回...");
        getchar();
        getchar();
    }
    p=head->next;
    while(p)
    {
        fprintf(fp,"编号:%d\t名称:%s\t进价:%d\t售价:%d\t进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
        p=p->next;
    }
    fclose(fp);
    printf("保存成功!\n按Enter键返回...");
    getchar();
    getchar();
}
void Display()//显示链表所有信息
{
    struct node *p;
    p=head->next;
    while(p)
    {
        printf("编号:%d\t名称:%s\t进价:%d\t售价:%d\n进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
        p=p->next;
    }
    printf("按Enter键返回主菜单...");
    getchar();
    getchar();
}
void InputRecord()//添加录入信息
{
    struct node *p;
    int sno;
    printf("请输入想添加商品编号:");
    scanf("%d",&sno);
    p=head->next;
    while(p)
    {
        if(p->data.num==sno)
        {
            printf("此商品已存在!\n请重新输入:");
            scanf("%s",&sno);
            p=head->next;
        }
        else
            p=p->next;
    }
    tail->next=(struct node*)malloc(sizeof(struct node));
    tail=tail->next;
    tail->data.num=sno;
    printf("名称:");
    scanf("%s",&tail->data.name);
    printf("进价:");
    scanf("%d",&tail->data.jinjia);
    printf("售价:");
    scanf("%d",&tail->data.shoujia);
    printf("进货量:");
    scanf("%d",&tail->data.jinhuoliang);
    printf("销售量:");
    scanf("%d",&tail->data.xiaoshouliang);
    tail->next=NULL;
    printf("添加成功!\n按Enter返回主菜单...");
    getchar();
    getchar();
}
void DeleteRecord()//删除特定信息
{
    int sno;
    struct node *p,*s;
    char ch;
    p=head->next;
    s=p->next;
    printf("请输入删除商品编号:");
    scanf("%d",&sno);
    while(s)
    {
        if(s->data.num==sno)
        {
            printf("此商品存在!\n此商品信息\n");
            printf("编号:%d\t名称:%s\t进价:%d\t售价:%d\t进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
            break;
        }
        p=p->next;
        s=p->next;
    }
    printf("是否删除此商品信息?[Y/N]:");
    scanf("%s",&ch);
    switch(ch)
    {
    case 'Y':case 'y':break;
    default :return;
    }
    if(s!=NULL)
    {
        if(tail==s)
            tail=p;
        p->next=s->next;
        free(s);
        printf("删除成功!");
    }
    else
        printf("此商品不存在!");
    printf("按Enter键返回主菜单...");
    getchar();
    getchar();
}
void Query()//查询指定记录
{
    int sno;
    struct node *p;
    printf("请输入查询的商品编号:");
    scanf("%d",&sno);
    p=head->next;
    while(p)
    {
        if(p->data.num==sno)
        {
            printf("此商品存在!\n");
            break;
        }
        else
            p=p->next;
    }
    if(p==NULL)
        printf("此商品不存在!");
    else
    {
        printf("此商品信息\n");
        printf("编号:%d\t名称:%s\t进价:%d\t售价:%d\t进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
            
    printf("按Enter键返回主菜单...");
    getchar();
    getchar();
}
void ChangeRecord()//修改特定编号
{
    int sno;
    int n;
    struct node *p;
    printf("请输入查询的商品编号:");
    scanf("%d",&sno);
    p=head->next;
    while(p)
    {
        if(p->data.num==sno)
        {
            printf("此商品存在!\n");
            printf("此商品信息\n");
            printf("编号:%d\t名称:%s\t进价:%d\t售价:%d\t进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
            break;
        }
        else
            p=p->next;
    }
    while(1)
    {
    printf("=======修改信息========\n");
    printf("1 修改编号 2 修改名称\n");
    printf("3 修改进价 4 修改售价\n");
    printf("5 修改进货量 6 修改销售量\n");
    printf("0 退出\n");
    printf("=======修改信息========\n");
    printf("请选择: ");
    scanf("%d",&n);
    switch(n)
    {
    case 1:printf("请输入新编号:");scanf("%d",p->data.num);break;
    case 2:printf("请输入新名称:");scanf("%s",p->data.name);break;
    case 3:printf("请输入新进价:");scanf("%d",p->data.jinjia);break;
    case 4:printf("请输入新售价:");scanf("%d",p->data.shoujia);break;
    case 5:printf("请输入新进货量:");scanf("%d",p->data.jinhuoliang);break;
    case 6:printf("请输入新销售量:");scanf("%d",p->data.xiaoshouliang);break;
    case 0:
    default:printf("键入选项不正确!");
    }
    }
}
void menu()//菜单
{
    printf("\n=======商品管理系统=======\n");
    printf("1、载入商品信息 2、保存商品信息\n");
    printf("3、显示全部信息 4、增加商品信息\n");
    printf("5、删除商品信息 6、查询商品信息\n");
    printf("7、修改商品信息 0、退出\n");
    printf("=======商品管理系统=======\n");
    printf("请选择:");
}
int main(void)
{
    int choice;
    initial();
    while(1)
    {
        menu();
        scanf("%d",&choice);
        switch(choice)
        {
            case 0:exit(0);
            case 1:ReadFromFile();break;
            case 2:WriteTofile();break;
            case 3:Display();break;
            case 4:InputRecord();break;
            case 5:DeleteRecord();break;
            case 6:Query();break;
            case 7:ChangeRecord();break;
            default:printf("键入选项不正确!");
        }
        system("cls");
    }
    return 0;
}
搜索更多相关主题的帖子: data 信息 next 商品 printf 
2021-06-25 13:46
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
报错 warning C4473: “fscanf”: 没有为格式字符串传递足够的参数
fscanf(fp,"%d%s%d%d%d%d",&(tail->data.num),&(tail->data.name),&(tail->data.jinjia),&(tail->data.shoujia),&(tail->data.jinhuoliang)),&(tail->data.xiaoshouliang);
fscanf(fp,"%d%s%d%d%d%d",&(tail->data.num),&(tail->data.name),&(tail->data.jinjia),&(tail->data.shoujia),&(tail->data.jinhuoliang),&(tail->data.xiaoshouliang));

报错 warning C4477: “scanf”: 格式字符串“%s”需要类型“char *”的参数,但可变参数 1 拥有了类型“int *”
scanf("%s",&sno);
scanf("%d",&sno);

报错 error C2601: “ChangeRecord”: 本地函数定义是非法的
    if(p==NULL)
        printf("此商品不存在!");
    else
    {
        printf("此商品信息\n");
        printf("编号:%d\t名称:%s\t进价:%d\t售价:%d\t进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
            
    printf("按Enter键返回主菜单...");
    getchar();
    getchar();
}
void ChangeRecord()//修改特定编号

    if(p==NULL)
        printf("此商品不存在!");
    else
    {
        printf("此商品信息\n");
        printf("编号:%d\t名称:%s\t进价:%d\t售价:%d\t进货量:%d\t销售量:%d\n",p->data.num,p->data.name,p->data.jinjia,p->data.shoujia,p->data.jinhuoliang,p->data.xiaoshouliang);
    }
    printf("按Enter键返回主菜单...");
    getchar();
    getchar();
}
void ChangeRecord()//修改特定编号


报错 warning C4477: “scanf”: 格式字符串“%d”需要类型“int *”的参数,但可变参数 1 拥有了类型“int”
    case 1:printf("请输入新编号:");scanf("%d",p->data.num);break;
    case 2:printf("请输入新名称:");scanf("%s",p->data.name);break;
    case 3:printf("请输入新进价:");scanf("%d",p->data.jinjia);break;
    case 4:printf("请输入新售价:");scanf("%d",p->data.shoujia);break;
    case 5:printf("请输入新进货量:");scanf("%d",p->data.jinhuoliang);break;
    case 6:printf("请输入新销售量:");scanf("%d",p->data.xiaoshouliang);break;

    case 1:printf("请输入新编号:");scanf("%d",&p->data.num);break;
    case 2:printf("请输入新名称:");scanf("%s",p->data.name);break;
    case 3:printf("请输入新进价:");scanf("%d",&p->data.jinjia);break;
    case 4:printf("请输入新售价:");scanf("%d",&p->data.shoujia);break;
    case 5:printf("请输入新进货量:");scanf("%d",&p->data.jinhuoliang);break;
    case 6:printf("请输入新销售量:");scanf("%d",&p->data.xiaoshouliang);break;


然后,可以编译成功了。
(运行就算了,有这么多低级语法错误的代码,那逻辑错误肯定更多。)
2021-06-25 14:10
白落虚
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-6-25
得分:0 
回复 2楼 rjsp
感谢感谢
2021-06-25 14:16
白落虚
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-6-25
得分:0 
回复 2楼 rjsp
还是新手,学的没多长时间,感谢点拨,谢谢
2021-06-25 14:27



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-506089-1-1.html




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

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