Shirley_Xiqi
Lemon-XQ
采纳率50%
2016-03-31 13:49 阅读 2.2k
已采纳

求助!!!关于C里scanf %s %c和结构体之间的疑惑!!!

最近在编一个学生成绩管理系统,然后就发现了一个问题.....
scanf("%s %s %c ",name,stunum,&sex);
在运行时输入Xiaoming 2015000000 F
输出的stunum是2015000000, sex是F
但是把语句改成
scanf("%s %s %c ",student[0].name,student[0].stunum,&student[0].sex);
输入和上面一样的东西,输出却变成了stunum是2015000000F,sex还是F
为什么啊?不明白TAT
难道结构体里的字符串和普通字符串不一样么

求高手拯救我这个小白orz

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

4条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-03-31 15:24

    stunum分配的长度是多少,很可能是分配长度过短,结果越界访问到了sex字段。请保证至少分配字符串长度+1。以便存储字符串和结束的\0

    点赞 1 评论 复制链接分享
  • u010395948 歌楼听雨品人生 2016-04-02 04:00

    stunum的字符长度分配太短了,至少分配字符数+1,因为%s默认给添加了一个\0作为字符串的结尾。因为你这里的输入2015000000位10个字符,
    因此长度至少要设置为11

    点赞 1 评论 复制链接分享
  • u010395948 歌楼听雨品人生 2016-03-31 14:47

    结构体和普通字符应该是没有什么区别的啊。。。。你还是把代码贴出来吧。。。

    点赞 评论 复制链接分享
  • Shirley_Xiqi Lemon-XQ 2016-03-31 16:06

    ....
    struct information
    {

    char name[10],stunum[10];
    char sex;
    int grade[6],total;
    }student[10]={0};
    ....
    void input() //输入信息模块
    {
    system("cls");
    int i,j;
    printf(" 姓名 \t学号\t性别 高数 大语 英语 C语言 大物 体育\n");

    for(i=0;i<10;i++)
    {
    //输入Xiaoming   2015000000   F      87     88     86     93     79     85
      scanf("%s   %s   %c",student[i].name,student[i].stunum,&student[i].sex);    
      for(j=0;j<6;j++)
        {
          scanf("%d",&student[i].grade[j]);
       }
    
      printf("\n"); 
    }
    printf("\n%c",student[0].sex);
    printf("\n%s",student[0].stunum);
    

    }

    点赞 评论 复制链接分享

相关推荐