Chris Brown
2021-03-15 22:36
采纳率: 87.5%
浏览 35

关于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.

    望采纳

    点赞 评论
  • SoftwareTeacher 2021-03-15 22:48
    点赞 评论
  • 随缘|为而不争 2021-03-16 14:06

    2楼正确的解答

    点赞 评论

相关推荐 更多相似问题