HongRed 2023-09-12 22:43 采纳率: 28.6%
浏览 12
已结题

scanf直接退出报错异常,如何解决?(语言-c语言)

为什么到第二遍循环就报错了,这报错是什么意思,求解。

img

 inta
 SD*de[6]=f(SD*)malloc(6*sizeof(SD))
 if(de==NULL)
    printf"申请失败");
 printf"请选择要添加的人数.n");
 Scanf("%d",&a);
 for(inti=0;i<a;i++)
    printf"第%d个学生:n",i);
    printf"姓名:");
     scanf("%s",de[i]->name);
    printf"n")
    printf"学号:")
    Scanf("%s",de[i]->sn)
    printf"n")
    printf"电话:");
    Scanf("%s",de[i]->ip);
    printf"n")
    printf"年龄:");
    Scanf("%d",&de[i]->age)
 H
 free(de);

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-09-13 16:31
    关注

    引用 皆我百晓生 小程序回复内容作答:
    在这段代码中,有几个问题导致scanf直接退出并报错异常。

    首先,初始化变量int a时,缺少了分号(;)。需要将int a改为int a;。

    其次,使用malloc函数分配内存给指针数组de时,需要为每个指针元素也分配内存空间。可以使用循环遍历数组,为每个元素分配内存。修改语句为:

    for(int i=0; i<6; i++) {
        de[i] = (SD*)malloc(sizeof(SD));
    }
    

    接下来,if语句的括号中应该是de==NULL,而不是NULL。即if(de==NULL)。

    在for循环中,循环体内的printf语句没有换行符\n,导致输出结果没有换行。

    最后,free函数应该用在所有使用malloc函数分配的内存空间上,而不是指针数组本身。可以在所有操作结束后加上free(de[i]),循环遍历数组释放每个元素的内存空间。

    修正后的代码如下:

    int a;
    SD* de[6];
    for(int i=0; i<6; i++) {
        de[i] = (SD*)malloc(sizeof(SD));
    }
    if(de==NULL)
        printf("申请失败");
    printf("请选择要添加的人数。\n");
    scanf("%d",&a);
    for(int i=0; i<a; i++) {
        printf("第%d个学生:\n",i);
        printf("姓名:");
        scanf("%s",de[i]->name);
        printf("\n");
        printf("学号:");
        scanf("%s",de[i]->sn);
        printf("\n");
        printf("电话:");
        scanf("%s",de[i]->ip);
        printf("\n");
        printf("年龄:");
        scanf("%d",&de[i]->age);
    }
    for(int i=0; i<6; i++) {
        free(de[i]);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 9月12日