Chinaunix

标题: 关于结构体数组问题! [打印本页]

作者: baicaidaoshi    时间: 2015-11-15 20:27
标题: 关于结构体数组问题!
各位好,我中菜鸟,
在学习C语言中的结构体部分。
struct student
{
   int num;
   char name[20];
   char sex;
   int age;
   char addr[30];
}stu[3];
结构体变量是个数组,
但在常试用scanf输入成员列表里的内容时只输入到name
就不能在往下输入了。
以下图片就是代码内容跟测试时的内容!
各位高手请帮帮我!


作者: zsszss0000    时间: 2015-11-15 21:09
stu[i].name 而不是 &stu[i].name
name 本身就是char *
作者: fender0107401    时间: 2015-11-15 21:45
友情提示,这样的配色似乎很伤眼睛。
作者: VIP_fuck    时间: 2015-11-16 08:31
2楼说的对
作者: baicaidaoshi    时间: 2015-11-16 10:26
谢谢,我下班回家试试!
作者: bruceteen    时间: 2015-11-16 10:35
3楼说得对!
竟然用黑底白色,难道自己不觉得眼花难受?!
作者: cokeboL    时间: 2015-11-16 12:06
2楼到楼上说的都对!
作者: lxyscls    时间: 2015-11-16 12:38
未看三楼回复,眼已瞎
作者: baicaidaoshi    时间: 2015-11-16 14:17
哦,我视力有点缺陷,还望各位理解
作者: dorodaloo    时间: 2015-11-16 14:47
很伤眼睛。4楼说得对!
作者: baicaidaoshi    时间: 2015-11-16 18:03
回复 2# zsszss0000


   将&stu.name更改成后stu.name仍然不行,
仍跟之前一样,输入到name成员后就结束了!
作者: zsszss0000    时间: 2015-11-16 23:54
本帖最后由 zsszss0000 于 2015-11-16 23:55 编辑
  1.   #include <stdio.h>
  2.   struct student
  3.   {
  4.      int num;
  5.      char name[20];
  6.      char sex;
  7.      int age;
  8.      char addr[30];
  9.   }stu[3];

  10.   int main()
  11.   {
  12.     int i = 0;
  13.     for(i=0;i<3;i++)
  14.     {
  15.       scanf("%d %s %c %d %s",&stu[i].num,stu[i].name,&stu[i].sex,&stu[i].age,stu[0].addr);
  16.     }
  17. }
复制代码
试试这个 应该没有问题
回复 11# baicaidaoshi


   
作者: baicaidaoshi    时间: 2015-11-17 18:35
zsszss0000 发表于 2015-11-16 23:54
试试这个 应该没有问题
回复 11# baicaidaoshi

现在输入是可以正常了,只是我稍作了一点修改后在输入完name后,sex跟age一起显示,无法输入性别!
怎么会这样我又写错那个里了?


作者: zsszss0000    时间: 2015-11-17 20:08
大哥,你贴源代码吧

回复 13# baicaidaoshi


   
作者: baicaidaoshi    时间: 2015-11-18 08:48
我以经帖图了呀!看不到?
作者: zsszss0000    时间: 2015-11-18 09:31
不是 贴图  是贴代码,贴图怎么看啊




回复 15# baicaidaoshi


   
作者: idi0t    时间: 2015-11-18 09:41
回复 2# zsszss0000


    两个一样的
作者: baicaidaoshi    时间: 2015-11-18 18:05
回复 16# zsszss0000
#include <stdio.h>
#define p printf
#define s scanf
      struct student
      {
         int num;
         char name[20];
         char sex;
         int age;
         char addr[30];
      }

      main()
      {
       struct student str[3];

        int i = 0;
        for(i=0;i<3;i++)
        {
        p ("Num:");
        s ("%d",&str.num);
       p ("Name:");
      s ("%s",str.name);
      p ("Sex:");
      s ("%c",&str.sex);
      p ("Age:");
      s ("%d",&str.age);
      p ("Addr:");
      s ("%s",&str.addr);
        }
       int j=0;
       for (j=0;j<3;j++)
       {
       printf ("num:%d\nname:%s\nsex:%c\nage:%d\naddr:%s\n",str[j].num,str[j].name,str[j].sex,str[j].age,str[j].addr);
        }
}



这个就是问题代码,在输入完name后,
就成了Sex:Age:连在一起,没办法输入性别!



   
作者: woshipanlaoda    时间: 2015-11-23 23:26
sex已经获取到了值,就是上边name字符串后面你输入的换行符。
代码应该这样:
  p ("Name:");
  s ("%s",str.name);
  fflush(stdin); //清空一下输入缓冲区
  p ("Sex:");
  s ("%c",&str.sex);
作者: ZaCkMeGaMiNd    时间: 2015-11-24 08:54
话说,编译的时候没有警告吗?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2