James2002111 2022-06-28 00:15 采纳率: 75%
浏览 76
已结题

在函数void delete中出现问题,如何解决才能实现代码编译。

在函数void delete中出现问题

问题是在 void delete 之前需要使用非限定id,请问我需要怎么解决呢

我把void改成其他也不行,搜索过其他资料也不对

代码调试通过并且将问题解决。

#include<stdio.h>
#include <string.h>
#include<stdlib.h>
#include<string.h>
#define N 30
#pragma warning(disable:4996)
struct people
{
    int jiankangma[32];//健康码 
    char number_id[36];//身份证 
    char name[18];//姓名 
    long long phone;//电话 
    char address[20];//所在地区  
    char sblb[30];//申报类别
    char company[50];//所属单位名称
    char jkzk[10];//健康状态 
};
struct people peo[N];
void menu()
{
    char ch;
    printf("\n\n\t\t  ** 欢迎使用健康申报系统 ** \n\n\n");
    printf("\t\t请选择(1-6) :\n");
    printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("\t\t\t   1.查询人民信息\n");
    printf("\t\t\t   2.修改人民信息\n");
    printf("\t\t\t   3.添加人民信息\n");
    printf("\t\t\t   4.删除人民信息\n");
    printf("\t\t\t   5.浏览人民记录信息\n");
    printf("\t\t\t   6.退出\n");
    printf("\t\t************************************\n");
    printf("\n\t\t你的选择是:");
    //ch=getche();
};
void Findname()  //用户自定义函数,实现对指定数据的查找功能。(名字) 
{

    char s[20];  //定义用户输入的学生姓名数据为char型,占20列。
    int i=0;
    printf("请输入要查询的姓名:");
    scanf("%s",s);
    while(strcmp(peo[i].name,s)!=0&&i<N)
        i++;  //当输入的姓名与当前姓名不相同时,i自增1,比较下一个成员。
    if(i==N)
    {
        printf("未找到相关信息!\n");
    }
    printf("-------------------------------------------------------------------\n");
    printf("健康码   身份证号   姓名   电话   所在地区   申报类别   所属单位名称   健康状况 \n");
    printf("-------------------------------------------------------------------\n");
    printf("%s %s %s %lld %s %s %s %s\n", peo[i].jiankangma, peo[i].number_id, peo[i].name, peo[i].phone, peo[i].address, peo[i].sblb, peo[i].company, peo[i].jkzk);
    printf("-------------------------------------------------------------------\n");
    
}  //以表列的形式输出查找到的成员的相关信息。

void Findnumber_id()  //用户自定义函数,实现对指定数据的查找功能。(身份证) 
{
    char s[50];  //定义用户输入身份证号数据为char型,占20列。
    int i=0;
    printf("请输入要查询的人民身份证号:"); 
    scanf("%s",s);
    while(strcmp(peo[i].number_id,s)!=0&&i<N)
        i++;  //当输入的学号与当前学号不相同时,i自增1,比较下一个成员。
    if(i==N) 
    {
        printf("未找到相关学生信息!\n");
    }
    printf("-------------------------------------------------------------------\n");
    printf("健康码   身份证号   姓名   电话   所在地区   申报类别   所属单位名称   健康状况 \n");
    printf("-------------------------------------------------------------------\n");
    printf("%s %s %s %lld %s %s %s %s\n", peo[i].jiankangma, peo[i].number_id, peo[i].name, peo[i].phone, peo[i].address, peo[i].sblb, peo[i].company, peo[i].jkzk);
    printf("-------------------------------------------------------------------\n");
}  //以表列的形式输出查找到的成员的相关信息。

void Insert()  //用户自定义Insert函数,实现将学生信息插入指定位置的功能。
{
    int i,j;
    printf("请输入要插入的位置:");
    scanf("%d",&i);
    if(i>N)
    {  //当要插入位置大于结构体数组元素总数时,直接将数据插入到结构体数组最后。
    printf("输入人民健康码:");
    scanf("%s",peo[N].jiankangma);
    printf("输入人民身份证号:");
    scanf("%s",peo[N].number_id);
    printf("输入人民姓名:");
    scanf("%s",peo[N].name);
    printf("输入人民电话:");
    scanf("%lld",&peo[N].phone);
    printf("输入人民所在地区:");
    scanf("%s",&peo[N].address);
    printf("输入人民申报类别:");
    scanf("%s",&peo[N].sblb);
    printf("输入人民所属单位名称:");
    scanf("%s",&peo[N].company);
    printf("输入人民健康状况:");
    scanf("%s",&peo[N].jkzk);
    printf("信息输入成功!\n");
    }  //用户分别输入的各项信息,系统返回"输入成功"的信息。
    else
    {  //当要插入位置不大于结构体数组成员总数时,执行下述操作。
        for(j=N-1;j>=i;j--)
        {
            j=j+1;
            strcpy(peo[j+1].name,peo[j].name);
            strcpy(peo[j+1].number_id,peo[j].number_id);
            strcpy(peo[j+1].address,peo[j].address);
            strcpy(peo[j+1].sblb,peo[j].sblb);
            strcpy(peo[j+1].company,peo[j].company);
            strcpy(peo[j+1].jkzk,peo[j].jkzk);
        }  //通过for循环语句,将第j+1项的各项数据赋值给第j项,直到要插入数据的位置为止,实现第i项之后的数据每项都向后移动一个位置。
        printf("输入人民健康码:");
    scanf("%s",peo[N].jiankangma);
    printf("输入人民身份证号:");
    scanf("%s",peo[N].number_id);
    printf("输入人民姓名:");
    scanf("%s",peo[N].name);
    printf("输入人民电话:");
    scanf("%d",&peo[N].phone);
    printf("输入人民所在地区:");
    scanf("%d",&peo[N].address);
    printf("输入人民申报类别:");
    scanf("%d",&peo[N].sblb);
    printf("输入人民所属单位名称:");
    scanf("%d",&peo[N].company);
    printf("输入人民健康状况:");
    scanf("%d",&peo[N].jkzk);
    printf("信息输入成功!\n");
    }  //将用户输入的各项数据赋值到第i个位置中,实现数据的插入。
    j++;  //全局变量n自增1,保证插入的数据存储到结构体中。
    i++;
}
void Input()//录入学生信息函数(添加) 
{
    int i;
    FILE *fp;
    //system("cls");
    for (int i = 0; i < N; i++)
    {//先将数据赋给结构体变量,而后再写入
        printf("开始录入信息\n请先输入第%d名人民的健康码:\n", i + 1);
        scanf("%s", peo[i].jiankangma);
        printf("请输入第%d人民的身份证号:\n", i + 1);
        scanf("%s", peo[i].number_id);
        printf("请输入第%d名人民的姓名:\n", i + 1);
        scanf("%s", peo[i].name);
        printf("请输入第%d名人民的电话:\n", i + 1);
        scanf("%lld", &peo[i].phone);
        printf("请输入第%d名人民的地址:\n", i + 1);
        scanf("%s", peo[i].address);
        printf("请输入第%d名人民的申报类别:\n", i + 1);
        scanf("%s", peo[i].sblb);
        printf("请输入第%d名人民的所属单位名称:\n", i + 1);
        scanf("%s", peo[i].company);
        printf("请输入第%d名人民的健康状况:\n", i + 1);
        scanf("%s", peo[i].jkzk);
        // system("cls");
        fp=fopen("D\\代码\\健康申报系统名单.txt","r");
        fwrite(&peo[0],sizeof(peo[0]),N,fp);
        fclose(fp);
    }
    // writeinfo();//调用文件写入函数写入数据
};
void Output()  //用户自定义Output函数,实现数据的输出功能。M
{
    int i;
    printf("-------------------------------------------------------------------\n");
    printf("健康码   身份证号   姓名   电话   所在地区   申报类别   所属单位名称   健康状况\n");
    printf("-------------------------------------------------------------------\n");
    for (i = 0; i < N; i++)
    {
        printf("%s %s %s %lld %s %s %s %s\n", peo[i].jiankangma, peo[i].number_id, peo[i].name, peo[i].phone, peo[i].address, peo[i].sblb, peo[i].company, peo[i].jkzk);
        printf("-------------------------------------------------------------------\n");
 
    }  //使用for循环语句,输出结构体中所有成员信息。
};
void delete()
{
 long x;
 int j,i=0;
 FILE *fp;
      int n=0;
      if((fp=fopen("D\\代码\\健康申报系统名单.txt","r"))==NULL){
          printf("文件错误");
          return; 
      }
      while (!feof(fp))
      {
        if((fread(&peo[N],sizeof(struct people),1,fp)))
          n++;
      }
fclose(fp);

    printf("输入要删除的身份证号:");
    scanf("%s",&x);
while(peo[i].number_id!=x&&i<n)
    i++;                                   //比较输入的 x 数据与结构体中身份证号,若不相同,i 自增 1
if(i==n)
{
    printf("未找到相关人员!\n");
    return;
}  
}                                        //若 i 与 n 值相同,说明无此数据,输出“未找到信息!
void main()
{
    char c;
    for()
    {
        menu();
        ch=getche();
        switch(ch);
        {
            case 1:
                switch(find())
                {
                case 1:findname();break;
                case 2:Findnumber_id();break;
                }
            case 2:Insert();break;
            case 3:Input();break;
            case 4:delete();break;
            case 5:Output();break;
            case 0:exit(0);break;
            default:printf("*输入错误!*");break;
        }
    }
     
 } 


  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-06-28 15:23
    关注

    修改完善如下,供参考:

    #pragma warning(disable:4996)
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #define N 1000
    
    struct people
    {
        char jiankangma[32];//健康码  int jiankangma[32];
        char number_id[36];//身份证 
        char name[18];//姓名 
        long long phone;//电话 
        char address[20];//所在地区  
        char sblb[30];//申报类别
        char company[50];//所属单位名称
        char jkzk[10];//健康状态 
    };
    struct people peo[N];
    int    max_N = 0;
    void menu()
    {
        //char ch;
        printf("\n\n\t\t  ** 欢迎使用健康申报系统 ** \n\n\n");
        printf("\t\t请选择(1-6) :\n");
        printf("\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        printf("\t\t\t   1.查询人民信息\n");
        printf("\t\t\t   2.插入人民信息\n");
        printf("\t\t\t   3.添加人民信息\n");
        printf("\t\t\t   4.删除人民信息\n");
        printf("\t\t\t   5.浏览人民记录信息\n");
        printf("\t\t\t   6.退出\n");
        printf("\t\t************************************\n");
        printf("\n\t\t你的选择是:");
        //ch=getche();
    };
    void Findname()  //用户自定义函数,实现对指定数据的查找功能。(名字) 
    {
    
        char s[20];  //定义用户输入的学生姓名数据为char型,占20列。
        int i = 0;
        printf("请输入要查询的姓名:");
        scanf("%s", s);
        while (strcmp(peo[i].name, s) != 0 && i < max_N)
            i++;  //当输入的姓名与当前姓名不相同时,i自增1,比较下一个成员。
        if (i == max_N)
        {
            printf("未找到相关信息!\n");
            return;
        }
        printf("-------------------------------------------------------------------\n");
        printf("健康码   身份证号   姓名   电话   所在地区   申报类别   所属单位名称   健康状况 \n");
        printf("-------------------------------------------------------------------\n");
        printf("%s %s %s %lld %s %s %s %s\n", peo[i].jiankangma, peo[i].number_id, 
            peo[i].name, peo[i].phone, peo[i].address, peo[i].sblb, peo[i].company, peo[i].jkzk);
        printf("-------------------------------------------------------------------\n");
    
    }  //以表列的形式输出查找到的成员的相关信息。
    
    void Findnumber_id()  //用户自定义函数,实现对指定数据的查找功能。(身份证) 
    {
        char s[36];  //定义用户输入身份证号数据为char型。
        int i = 0;
        printf("请输入要查询的人民身份证号:");
        scanf("%s", s);
        while (strcmp(peo[i].number_id, s) != 0 && i < max_N)
            i++;  //当输入的学号与当前学号不相同时,i自增1,比较下一个成员。
        if (i == max_N)
        {
            printf("未找到相关学生信息!\n");
            return;
        }
        printf("-------------------------------------------------------------------\n");
        printf("健康码   身份证号   姓名   电话   所在地区   申报类别   所属单位名称   健康状况 \n");
        printf("-------------------------------------------------------------------\n");
        printf("%s %s %s %lld %s %s %s %s\n", peo[i].jiankangma, peo[i].number_id,
            peo[i].name, peo[i].phone, peo[i].address, peo[i].sblb, peo[i].company, peo[i].jkzk);
        printf("-------------------------------------------------------------------\n");
    }  //以表列的形式输出查找到的成员的相关信息。
    
    void Insert()  //用户自定义Insert函数,实现将学生信息插入指定位置的功能。
    {
        int i, j;
        if (max_N >= N) return;  //插入数超过最大容量,不允许插入操作。
        printf("请输入要插入的位置:");
        scanf("%d", &i);
        if (i > max_N || i <= 0)
        {  //当要插入位置大于结构体数组元素总数时,直接将数据插入到结构体数组最后。
            printf("输入人民健康码:");
            scanf("%s", peo[max_N].jiankangma);
            printf("输入人民身份证号:");
            scanf("%s", peo[N].number_id);
            printf("输入人民姓名:");
            scanf("%s", peo[max_N].name);
            printf("输入人民电话:");
            scanf("%lld", &peo[max_N].phone);  //scanf("%d", &peo[N].phone);
            printf("输入人民所在地区:");
            scanf("%s", peo[max_N].address);  //scanf("%d", &peo[N].address);
            printf("输入人民申报类别:");
            scanf("%s", peo[max_N].sblb);
            printf("输入人民所属单位名称:");
            scanf("%s", peo[max_N].company);
            printf("输入人民健康状况:");
            scanf("%s", peo[max_N].jkzk);
            printf("信息输入成功!\n");
        }  //用户分别输入的各项信息,系统返回"输入成功"的信息。
        else
        {  //当要插入位置不大于结构体数组成员总数时,执行下述操作。
            for (j = max_N; j >= i; j--)
            {
                peo[j] = peo[j - 1];
                //strcpy(peo[j + 1].name, peo[j].name);
                //strcpy(peo[j + 1].number_id, peo[j].number_id);
                //strcpy(peo[j + 1].address, peo[j].address);
                //strcpy(peo[j + 1].sblb, peo[j].sblb);
                //strcpy(peo[j + 1].company, peo[j].company);
                //strcpy(peo[j + 1].jkzk, peo[j].jkzk);
            }  //通过for循环语句,将第j+1项的各项数据赋值给第j项,直到要插入数据的位置为止,
               //实现第i项之后的数据每项都向后移动一个位置。
            printf("输入人民健康码:");
            scanf("%s", peo[i-1].jiankangma);
            printf("输入人民身份证号:");
            scanf("%s", peo[i-1].number_id);
            printf("输入人民姓名:");
            scanf("%s", peo[i-1].name);
            printf("输入人民电话:");
            scanf("%lld", &peo[i-1].phone);
            printf("输入人民所在地区:");
            scanf("%s", peo[i-1].address);
            printf("输入人民申报类别:");
            scanf("%s", peo[i-1].sblb);    //scanf("%d", &peo[N].sblb);
            printf("输入人民所属单位名称:");
            scanf("%s", peo[i-1].company); //scanf("%d", &peo[N].company); 
            printf("输入人民健康状况:");
            scanf("%s", peo[i-1].jkzk);    //scanf("%d", &peo[N].jkzk);
            printf("信息输入成功!\n");
        }  //将用户输入的各项数据赋值到第i个位置中,实现数据的插入。
        max_N++;  //全局变量n自增1,保证插入的数据存储到结构体中。
    }
    void Input()//录入学生信息函数(添加) 
    {
        int i = 1;
        //system("cls");
        do {     //for (int i = 0; i < N; i++)
             //先将数据赋给结构体变量,而后再写入
            printf("开始录入信息\n请先输入第%d名人民的健康码:\n", max_N + 1);
            scanf("%s", peo[max_N].jiankangma);
            printf("请输入第%d人民的身份证号:\n", max_N + 1);
            scanf("%s", peo[max_N].number_id);
            printf("请输入第%d名人民的姓名:\n", max_N + 1);
            scanf("%s", peo[max_N].name);
            printf("请输入第%d名人民的电话:\n", max_N + 1);
            scanf("%lld", &peo[max_N].phone);
            printf("请输入第%d名人民的地址:\n", max_N + 1);
            scanf("%s", peo[max_N].address);
            printf("请输入第%d名人民的申报类别:\n", max_N + 1);
            scanf("%s", peo[max_N].sblb);
            printf("请输入第%d名人民的所属单位名称:\n", max_N + 1);
            scanf("%s", peo[max_N].company);
            printf("请输入第%d名人民的健康状况:\n", max_N + 1);
            scanf("%s", peo[max_N].jkzk);
            max_N++;
            if (max_N >= N) {
                printf("记录已满,退出添加!");
                break;
            }
            printf("是否继续添加信息(1.继续  0.退出):");
            scanf("%d", &i);
        } while (i);
    
    }   //;
    void writeinfo()
    {
        FILE* fp;
        fp = fopen("D:\\健康申报系统名单.txt", "w");
        if (fp == NULL)  return;
        fwrite(peo, sizeof(struct people), max_N, fp);
        fclose(fp);
    }
    void readinfo()
    {
        FILE* fp;
        if ((fp = fopen("D:\\健康申报系统名单.txt", "r")) == NULL) {
            printf("读文件错误\n");
            return;
        }
        while (1){
            if (fread(&peo[max_N], sizeof(struct people), 1, fp) != 1) break;
                max_N++;
        }
        fclose(fp);
    }
    void Output()  //用户自定义Output函数,实现数据的输出功能。M
    {
        int i;
        if (max_N <= 0)  return;
        printf("-------------------------------------------------------------------\n");
        printf("健康码   身份证号   姓名   电话   所在地区   申报类别   所属单位名称   健康状况\n");
        printf("-------------------------------------------------------------------\n");
        for (i = 0; i < max_N; i++)
        {
            printf("%s %s %s %lld %s %s %s %s\n", peo[i].jiankangma, peo[i].number_id,
                peo[i].name, peo[i].phone, peo[i].address, peo[i].sblb, peo[i].company, peo[i].jkzk);
            printf("-------------------------------------------------------------------\n");
    
        }  //使用for循环语句,输出结构体中所有成员信息。
    }
    void Delete()
    {
        char x[36];  //long x;
        int j, i = 0;
        printf("输入要删除的身份证号:");
        scanf("%s", x);  //scanf("%s", &x);
        //while (peo[i].number_id != x && i < n)
        while (strcmp(peo[i].number_id, x) != 0 && i < max_N)
            i++;  //比较输入的 x 数据与结构体中身份证号,若不相同,i 自增 1
        if (i == max_N)
        {
            printf("未找到相关人员!\n");
            return;
        }
        else {
            for (j = i; j < max_N - 1; j++)
                peo[j] = peo[j + 1];
            max_N--;
        }
    }     //若 i 与 n 值相同,说明无此数据,输出“未找到信息!
    void main()
    {
        //char ch;
        int ch;
        readinfo();
        for (;;)
        {
            menu();
            scanf("%d", &ch);  //ch = getche();
            switch (ch)        //;
            {
            case 1:
                int find;
                do {
                    printf("1.按姓名查找\n2.按身份证号查找\n请选择(1-2):");
                    scanf("%d", &find);
                } while (find < 1 || find>2);
                switch (find)     //find()
                {
                case 1:Findname(); break; //findname()
                case 2:Findnumber_id(); break;
                }
                break;
            case 2:Insert();break;
            case 3:Input(); break;
            case 4:Delete();break;
            case 5:Output();break;
            case 6:writeinfo(); exit(0); break;
            default:printf("*输入错误!*"); break;
            }
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月6日
  • 已采纳回答 6月28日
  • 创建了问题 6月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度