Chris Brown 2021-03-15 22:36 采纳率: 100%
浏览 37
已采纳

关于scanf的问题

在使用scanf()读取多个字符串时出现问题,其中一个字符串变量出现以'/000'开始,导致直接为空串

代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include<stdbool.h>
struct student{
    int No;
    char name[10];
    char gender[10];
    int age;
    int grades;
};
struct student students[10];
int cmp(const void *a,const void *b)
{
    struct student L=*((struct student*)a);
    struct student R=*((struct student*)b);
    if(L.grades>R.grades)
        return 1;
    else
        return -1;
}
int main()
{
    int N;
    scanf("%d",&N);
    int length;
    for(int i=0;i<N;i++){
        char No[10],name[10],gender[10],age[2],grades[3];
        scanf("%s%s%s%s%s",No,name,gender,age,grades);
        sscanf(No,"%d",&students[i].No);
        sscanf(name,"%s",&students[i].name);
        sscanf(gender,"%s",&students[i].gender);
        sscanf(age,"%d",&students[i].age);
        sscanf(grades,"%d",&students[i].grades);
        length=i;
    }
    qsort(students,length+1,sizeof(students[0]),cmp);
    int j;
    for(j=0;j<length;j++){
        printf("%d %s %s %d %d\n",students[j].No,students[j].name,students[j].gender,students[j].age,students[j].grades);
    }
    printf("%d %s %s %d %d",students[j].No,students[j].name,students[j].gender,students[j].age,students[j].grades);
    return 0;
}

测试数据:

2
1 aa male 13 1
2 bb female 14 0

但是调试的变量列表为:

 

  • 写回答

3条回答 默认 最新

  • 猫叔大鸭梨 2021-03-16 10:28
    关注

    age[2] 容量不够,也不需要10,age[3]就够了。  

    当你输入13的时候转成%s,实际上是 13\0  ,后面还有个结束符\0.

    望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大