鱼C论坛

 找回密码
 立即注册
查看: 2093|回复: 3

[已解决]运行显示有一个错误,不知道错哪!

[复制链接]
发表于 2019-6-18 22:33:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<string.h>

#define N 50     //储存结构体的数组的长度
#define IS_EXIST 23333     //创建该结构体存在的标志

//歌曲信息结构体
typedef struct SongInfo
{
    char name[20];     //歌曲名
    char author[20];   //作者
    char singer[20];   //演唱者
    char pub_date[6];  //发行年月(yyyymm)

    int _exist;     //方便后面筛选,如果该值等于IS_EXIST,证明该结构体存在
}SI;

//////////↓辅助函数↓//////////

//打开文件并将文件中的内容读取到结构体数组中
int readfile(SI *slist)
{
    int i = 0;
    FILE* rfile = fopen("song.txt","r");     //打开文件,方式为只读,文件名为"song.txt"
    if(!rfile)    //判断是否打开了文件
    {
        printf("open file error\n");
        return -1;
    }
    while(!feof(rfile))     //从文件中读取信息
    {
        fscanf(rfile,"%s%s%s%s",
            &slist[i].name,&slist[i].author,
            &slist[i].singer,&slist[i].pub_date);
        slist[i]._exist = IS_EXIST;
        i++;
    }
    if (fclose(rfile) != 0)     //判断是否关闭了文件
    {
        printf("close file error\n");
        return -1;
    }
    return 0;
}

//保存结构体数组中的内容到文件
int writefile(SI *slist)
{
    int i;
    FILE* wfile = fopen("song.txt","w");     //打开文件,方式为只写,覆盖式写入
    if(!wfile)     //判断是否打开了文件
    {
        printf("open file error\n");
        return -1;
    }
    for(i=0;i<N;i++)     //覆盖式写入文件
    {
        if(slist[i]._exist == IS_EXIST)
        {
            fprintf(wfile,"\n%s %s %s %s",
            slist[i].name,slist[i].author,
            slist[i].singer,slist[i].pub_date);
        }
    }
    if (fclose(wfile) != 0)     //判断是否关闭了文件
    {
        printf("close file error\n");
        return -1;
    }
}

//打印参数结构体的数据内容
void print_data(SI si)
{
    printf("歌曲名:%10s 作者:%10s 演唱者:%10s 发行年月:%6s\n",
                si.name,si.author,
                si.singer,si.pub_date);
}

//////////↓各菜单函数↓//////////

//1.录入
void add_record()
{
    int i;
    int button_2 = 0;     //选项按钮(第二层)
    SI si[N];     //创建临时储存文件中数据的结构体数组
    readfile(si);   //读取文件

    for (i = 0; i < N; i++)
    {
        if(si[i]._exist != IS_EXIST)     //筛选已录入数据的结构体
        {
            printf("请分别输入歌曲名、作者、演唱者、发行年月\n");
            scanf("%s%s%s%s",
                &si[i].name,&si[i].author,
                &si[i].singer,&si[i].pub_date);
            si[i]._exist = IS_EXIST;
            printf("1.继续录入 0.返回界面:");
            scanf("%d",&button_2);
            if(button_2 != 1)break;     //输入"1"之后继续录入
        }
    }

    writefile(si);    //写入文件
}

//2.删除
void delete_record()
{
    int i;
    char temp_name[20];     //临时字符串,存输入的姓名
    SI si[N];     //创建临时储存文件中数据的结构体数组
    readfile(si);    //读取文件

    printf("请输入要删除的歌曲的名字:");
    scanf("%s",&temp_name);
    for (i = 0; i < N; i++)
    {
        if(si[i]._exist != IS_EXIST)     //当循环到未录入数据的结构体之后跳出循环
        {
            printf("未找到该项记录!\n");
            system("pause");
            break;
        }
        else if(!strcmp(si[i].name,temp_name))     //比较输入的字符串和数据中的信息是否相等
        {
            int button_2 = 0;     //选项按钮(第二层)

            print_data(si[i]);

            printf("1.确认删除 0.取消:");     //找到符合条件的记录后确认是否删除
            scanf("%d",&button_2);
            if(button_2 != 1)break;
            else si[i]._exist = 0;
        }
    }

    writefile(si);    //写入文件
}

//3.浏览
void scan_record()
{
    int i;
    SI si[N];     //创建临时储存文件中数据的结构体数组
    readfile(si);    //读取文件

    printf("查询到的结果为:\n");
    for(i = 0; i<N; i++)     //打印出所有符合搜索条件的记录
    {
        if(si[i]._exist == IS_EXIST)     //筛选出已录入数据的记录
        {
            print_data(si[i]);
        }
    }
    system("pause");     //暂停

    writefile(si);     //写入文件
}

//4.查询
void search_record()
{
    int i;
    char data[20];     //创建临时储存输入的数据的字符串
    SI si[N];     //创建临时储存文件中数据的结构体数组
    readfile(si);     //读取文件

    printf("请输入歌曲名或作者或演唱者来查找信息:");
    scanf("%s",&data);
    printf("查找的结果为:\n");
    for(i = 0; i<N; i++)     //将所有符合条件的记录打印出来
    {
        if(si[i]._exist == IS_EXIST)     //筛选出已录入数据的记录
            if(!strcmp(data,si[i].name) ||
                !strcmp(data,si[i].author) ||
                !strcmp(data,si[i].singer))
            {
                print_data(si[i]);
            }
    }
    system("pause");     //暂停

    writefile(si);     //写入文件
}

//5.分组显示
void sort_record()
{
    int i,j;
    int x=0;     //创建一个临时整形变量来储存已录入数据的记录的条数
    SI si[N];     //创建临时储存文件中数据的结构体数组
    SI temp_si;     //创建临时结构体作为交换结构体数组中两个相邻结构体的媒介
    readfile(si);    //读取文件

    printf("分组后的结果为:\n");
    for(i = 0; i<N; i++)    //计算出已录入数据的记录的条数
    {
        if(si[i]._exist == IS_EXIST)x += 1;
    }
    for(i = 0; i<x-1; i++)     //冒泡排序
    {
        for(j = 0; j<x-i-1; j++)
        {
            if(strcmp(si[j].author,si[j+1].author)>0)     //按照记录的作者进行升序排序
            {
                temp_si = si[j];
                si[j] = si[j+1];
                si[j+1] = temp_si;
            }
        }
    }
    for(i = 0; i<N; i++)     //打印出排序后的所有记录
    {
        if(si[i]._exist == IS_EXIST)print_data(si[i]);
    }
    system("pause");     //暂停

    writefile(si);     //写入文件
}

//////////↓运行函数,程序逻辑主体↓//////////

//运行函数
void Run()
{
    while(1)     //无限循环,每运行完一个模块就返回菜单
    {
        int button_1 = 0;     //选项按钮(第一层)

        //菜单
        printf("---功能菜单---\n");
        printf("1.录入歌曲信息\n");
        printf("2.删除歌曲信息\n");
        printf("3.浏览歌曲信息\n");
        printf("4.查询歌曲信息\n");
        printf("5.分组显示信息\n");
        printf("0.退出管理系统\n");
        printf("-------------\n");
        printf("请选择:");

        scanf("%d",&button_1);     //输入选项按钮(第一层)
        if(button_1 == 0)break;     //为"0"时推出
        else{
            switch(button_1){                    //switch
                case 1:add_record();break;       //输入"1"进入录入模块
                case 2:delete_record();break;    //输入"2"进入删除模块
                case 3:scan_record();break;      //输入"3"进入浏览模块
                case 4:search_record();break;    //输入"4"进入查找模块
                case 5:sort_record();break;      //输入"5"进入排序模块
                default:                         //输入错误重新进入菜单
                    printf("请输入0-5之间的数字!\n");
                    system("pause");
                    break;
            }
        }
    }
}

//////////↓主函数↓//////////

int main()
{
    Run();     //运行
    return 0;
}
最佳答案
2019-6-18 23:21:31
添加一个头文件:#include <stdlib.h>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-18 23:00:11 | 显示全部楼层
    楼主,如果别人甩给你这么长的代码,然后要求你从头到尾逐句找出问题,你是否会情愿帮忙?

    还等什么,赶快给出线索,贴出你的错误信息呀!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-18 23:14:03 | 显示全部楼层
jackz007 发表于 2019-6-18 23:00
楼主,如果别人甩给你这么长的代码,然后要求你从头到尾逐句找出问题,你是否会情愿帮忙?

    还等 ...

F:\VC6.0\Microsoft Visual Studio\MyProjects\c1\c1.cpp(123) : error C2065: 'system' : undeclared identifier
执行 cl.exe 时出错.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-18 23:21:31 | 显示全部楼层    本楼为最佳答案   
添加一个头文件:#include <stdlib.h>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 06:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表