moksha_ 2019-07-11 15:56 采纳率: 0%
浏览 381

code blocks调试中出现 program ceceived signal SIGSEGV,Segmentation

我做了一个管理系统涉及信息保存以及查询 查询功能未运行调试时显示
program ceceived signal SIGSEGV,Segmentation
保存文件是成功的不在这里贴出
编译没有报错
以下是我的此次和问题有关的代码

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
struct N9 //结构体定义
{
    char number;
    char kind;char Name;char buydate;char fault;char faultdate;
    int price;
}s[SIZE],*p=s;

一些其他功能函数本次问题不涉及

int main() //主函数
{
    void gotoxy(int x,int y);
    void C1();//主菜单
    void addC1(struct N9 s[]); //主菜单中1添加设备信息
    void changeC1();//修改设备信息
    void find_1(struct N9 S[]);//按编号查询
//主菜单+菜单1

    C1();
    system("cls");//清屏
    //addC1(p);//已完成
    system("cls");
    find_1(p);
    //changeC1();//未完成
    Sleep(1000);
    return 0;
}

位置函数

void gotoxy(int x,int y) //位置函数
{
    COORD pos;
    pos.X=x;
    pos.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

查询功能函数

void find_1(struct N9 S[])//按编号查询
{
    system("cls");
    gotoxy(4,6);
    void load();//从文件中读入N9数据 并查询
    printf("\t\t\t|---------------------------------------------|\n");
    printf("\t\t\t|-设备查询-                                   |\n");
    printf("\t\t\t|---------------------------------------------|\n");
    printf("\t\t\t|请输入设备编号:                             |\n");
    load();
}
void load()//读取文件并查询
{
    int i;
    char H1;
    FILE * fp;
    if((fp=fopen("N9.dat","rb"))==NULL)
    {
        printf("cannot open file111\n");
        return;
    }
    for(i=0;i<5;i++)
    {
        if(fread(&s[i],sizeof(struct N9),1,fp)!=1);//从fp指向的文件读入数据
        {   if(feof(fp))//如果读取失败进行提示
            {fclose(fp);
            printf("file read error !\n");
            return;
            }
            //查询功能
            gotoxy(42,9);
            getchar();
            scanf("%c",&H1);
            for(i=0;i<5;i++)
            {
                if(strcmp(H1,s[i].number)==0)
                {
                    printf("\n\t\t\t|查询到编号为%s的设备:\n",s[i].number);
                    printf("\t\t\t|设备编号:%s;设备种类:%s;设备名称:%s;设备价格:%d;购入日期:%s",s[i].number,s[i].kind,s[i].Name,s[i].price,s[i].buydate);
                    return;
                }
                break;
            }
            printf("\t\t\t|未找到相关设备信息!                         |\n");
            printf("\n\n\n");
            printf("\t\t\t|---------------------------------------------|\n");
            fclose(fp);
            //

                }
    }
}

  • 写回答

1条回答 默认 最新

  • 枫舞的季节 2019-07-11 16:57
    关注

    有两个问题:
    1 if(strcmp(H1,s[i].number)==0) 这一行 , strcmp 接收的是字符串比较,你进行的是字符比较,字符比较直接 用 if (H1 == s[i].number) 就可以
    2 printf 的时候 %s 对应的是字符串,而要想输出字符 用 %c ,如果%s 对应的不是字符串,会崩溃

    评论

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码