James2002111 2022-06-28 00:15 采纳率: 60%
浏览 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日

悬赏问题

  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 游戏盾如何溯源服务器真实ip?
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL