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条)

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功