VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1635|回复: 15

结构体问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-20 17:40:01 | 显示全部楼层 |阅读模式
初次使用结构体,写了一个程序,编译、连结都正常。只是结果与输入的不同,多了一些东西,找了半天,搞不清那里的问题,请指点。
#include "stdio.h"
struct person{
        char name[20];
        char sex[20];
        int age;
};       
struct student{
        int number;
        int score;
    struct person roommate;
};
void main()
{
        int i;
       struct student myroommate[4];
        printf("----------------计科系三班---------------------\n");
        printf("请输入你宿舍成员的学号、成绩、姓名、性别、年龄:\n");
        printf("-----------注意输入各个部分以','分开-----------\n");
        for(i=0;i<4;i++)
        {
                scanf("%d,%d,%s,%s,%d",
                         &myroommate[i].number,
      &myroommate[i].score,
            &myroommatei].roommate.name,
            &myroommatei].roommate.sex,
           &myroommate[i].roommate.age);
        }
        printf("宿舍成员的学号、成绩、姓名、性别、年龄分别是:\n");
        for(i=0;i<4;i++)
        {
                printf("%d, %d, %s, %s, %d\n",
                   myroommate[i].number,myroommate[i].score,
                myroommate[i].roommate.name,
                  myroommate[i].roommate.sex,
                  myroommate[i].roommate.age);
        }
}
输出结果是每一行多了一些乱码.
回复

使用道具 举报

0

主题

25

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-1-30 08:45:01 | 显示全部楼层
        for(i=0;i<4;i++)
        {
                scanf("%d,%d,%s,%s,%d",
                         &myroommate[i].number,
      &myroommate[i].score,
            &myroommatei].roommate.name,
            &myroommatei].roommate.sex,
           &myroommate[i].roommate.age);
        }
====================
        printf("-----------注意输入各个部分以空格分开-----------\n");
                scanf("%d %d %s %s %d",
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-30 12:27:01 | 显示全部楼层
scanf("%d,%d,%s,%s,%d",
&myroommate[i].number,
      &myroommate[i].score,
&myroommatei].roommate.name,
&myroommatei].roommate.sex,
  &myroommate[i].roommate.age);
}
=========================>
scanf("%d,%d,%s,%s,%d",
&myroommate[i].number,
&myroommate[i].score,
myroommatei].roommate.name,       //没有'&'
myroommatei].roommate.sex,         //没有'&'
&myroommate[i].roommate.age);
}
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-30 15:45:02 | 显示全部楼层
楼上正解 %s是以空白符为分界
scanf  %s
             Matches a sequence of non-white-space characters;
             the next pointer must be a pointer to charac-
              ter  array  that  is  long enough to hold the input sequence and the terminating null character
              (’\0’), which is added automatically.  The input string stops at white space or at the  maximum
              field width, whichever occurs first.
回复

使用道具 举报

0

主题

78

帖子

29.00

积分

新手上路

Rank: 1

积分
29.00
发表于 2020-1-30 16:45:01 | 显示全部楼层
scanf("%d,%d,%s,%s,%d",
&myroommate[i].number,
&myroommate[i].score,
myroommate[i].roommate.name,       //没有'&'
myroommate[i].roommate.sex,         //没有'&', i 的半个中括号呢?
&myroommate[i].roommate.age);
}
回复

使用道具 举报

0

主题

3

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-30 22:54:01 | 显示全部楼层
问题出在,最后2个变量没有被scanf赋值吧你输入格式是
1,1,aa,bb,1
%d,%d,%s,%s,%d 格式将aa,bb,1全部赋值给第三个,最后2个是没有赋初值的
回复

使用道具 举报

0

主题

18

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-2-1 11:45:01 | 显示全部楼层
myroommate[i].roommate.name,       //没有'&'
myroommate[i].roommate.sex,         //没有'&'
  我也调试不出来,可悲了!
回复

使用道具 举报

0

主题

25

帖子

14.00

积分

新手上路

Rank: 1

积分
14.00
发表于 2020-2-1 21:54:01 | 显示全部楼层
myroommate[i].roommate.name,       //没有'&'
myroommate[i].roommate.sex,         //没有'&'
====================
和有没有& 没关系.

        printf("-----------注意输入各个部分以空格分开-----------\n");
                scanf("%d %d %s %s %d",
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-2-3 20:00:02 | 显示全部楼层
%s是以'\n'和空格结束的,你的','号不能用来分开%s的,来结束的吧...楼上给你说的很明白了,用printf("-----------注意输入各个部分以空格分开-----------\n");
                scanf("%d %d %s %s %d",
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-2-4 16:15:01 | 显示全部楼层
yctoya非常感谢你,现在调试成功了,至于那二个左方括号是我在帖源码的时候为了便于各位浏览,处理时不少心弄掉的,也感谢其他各位参与者,而且在去掉两个'&'的情况下也正确的,只是不知道为什么?yctoya是否可以解析一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表