Moonquaks 2022-02-17 20:43 采纳率: 66.7%
浏览 15

项目管理系统在模糊删除时,会出现乱码?

//模糊搜索部分代码
int result_mohu(char* key,char* str)
{
    typedef struct
    {
        char son[11];
    }Element;
(
 
    int i,j,k=0,l=0,m=0;
 
    //f=1为符合筛选条件
    int f=0;
 
 //N1为str的长度 N2为str连续子串的个数
 int N1=0,N2=0;
 N1=strlen(str);
 /*计算连续子串的个数*/
 for(i=1;i<=N1;i++)
  N2+=i;
 
    /*计算连续子串的个数*/
    //i控制子字符串的长度
    //j控制赋值
    //k控制新的线性结构b的下标
    //l控制子数组的首项在原数组中的位置
    //m控制即将用作赋值的str的下标
    Element *b=(Element*)malloc(sizeof(Element)*N2);
    for(i=1;i<=N1;i++)
    {
        l=0;
        /*while循环内为给一个子字符串数组赋值*/
        while(1)
            {
            m=l;
            for(j=0;j<i;j++)
            {
                b[k].son[j]=str[m];
                m++;
            }
            b[k].son[j]='\0';
            l++;
            k++;
            if(m==N1)
                break;
            }
    }
 
    //挨个比对
    for(i=0;i<N2;i++){
        if(strcmp(key,b[i].son)==0)
        {
             f=1;
             break;
        }
    }
    free(b);
    return f;
}

```c
//删除
void del(struct Node* list){
    int i,flag=0;
    char id1[8];
    printf("请输入您想要删除的项目编号(格式:字母+6个数字):\n");
    scanf("%s",id1);
    printf("再次确认你所要删除的项目编号是:");
    puts(id1);
    struct Node* pos;
    struct Node* p; 
    pos=list;
    if(list->next==NULL){
        printf("\n链表为空!\n");
        return;
    } 
    else{
        while(pos->next!=NULL){
            if(strcmp(id1,pos->next->data.id)==0){
                flag=1;
                break;
            } 
            pos=pos->next;
        }
        p=pos;
        if(flag==1){
            printf("\n\t你删除的项目信息为: \n");
            printf("\t项目名称:%s\n",pos->next->data.name );
            printf("\t项目类别:%s\n",pos->next->data.category);
            printf("\t项目编号:");
            for(i=0;i<7;i++){
                printf("%c",pos->next->data.id[i]);
            }
            printf("\n");
            printf("\t负责人:%s\n",pos->next->data.head);
            printf("\t指导老师:%s\n",pos->next->data.teacher);
            printf("\t成员:");
//            puts(pos->data.players);
            printf("%s\n",pos->next->data.players);
            printf("\t总人数: %d\n",pos->next->data.number);
            p->next=pos->next->next;
            free(pos->next);
            getchar();    
            printf("删除成功!\n");
        }
        else{
            printf("\t没有找到输入的编号信息!\n");
            printf("正在进行模糊搜索......\n");
            printf("模糊搜索找到的信息如下:\n"); 
            pos=list;
            int j=1;
            while(pos->next!=NULL){
                p=pos;
                if(result_mohu(id1,pos->next->data.id)==1){
                    printf("\t%d.\n",j);
                    printf("\t你删除的项目信息为: \n");
                    printf("\t项目名称:%s\n",pos->next->data.name );
                    printf("\t项目类别:%s\n",pos->next->data.category);
                    printf("\t项目编号:");
                    puts(pos->next->data.id);
                    printf("\t负责人:%s\n",pos->next->data.head);
                    printf("\t指导老师:%s\n",pos->next->data.teacher);
                    printf("\t成员:");
                    printf("%s\n",pos->next->data.players);
                    printf("\t总人数: %d\n",pos->next->data.number);
                    p->next=pos->next->next;
                    free(pos->next);
                    getchar();    
                    printf("删除成功!\n");
                    j++;
                }
                else{
                    pos=pos->next;
                }
            }
        }
    }
    return;
} 

依旧是项目管理系统,如果没有查到就用模糊搜索。
涉及到多个删除,结果找到之后项目名称就成了乱码。而且会时不时地退出程序

  • 写回答

1条回答 默认 最新

  • SoftwareTeacher 《编程之美》作者 2022-02-17 22:03
    关注

    那你可以回复到一个最初正确的版本么?

    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日

悬赏问题

  • ¥20 思科:Router c3600 MN-4E插槽
  • ¥15 16进制修改视频的元数据
  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 石墨烯磁表面等离子体
  • ¥15 angular 项目无法启动
  • ¥15 安装wampserver,图标绿色,但是无法进入软件
  • ¥15 C++ MFC 标准库 加密解密解惑
  • ¥15 两条数据合并成一条数据
  • ¥15 Ubuntu虚拟机设置
  • ¥15 comsol三维模型中磁场为什么没有“速度(洛伦兹项)”这一选项