| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1756 人关注过本帖
标题:请教关于结构体的用法
只看楼主 加入收藏
Hugo_D
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2016-5-24
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
请教关于结构体的用法
程序如下:
#include<stdio.h>
struct stud_type
{
    char name[20];
    long num;
    int age;
    char sex;
};
main()
{
    void list(struct stud_type student);
    struct stud_type student[3],*p;
    int i;
    for(i=0,p=student;i<3;p++,i++)
    {
        printf("Enter all data of student%d:\n",i);
        scanf("%s%ld%d%c\n",p->name,&p->num,&p->age,&p->sex);
    }
    for(i=0;i<3;i++)
        list(student[i]);
}
void list(student)
struct stud_type student;
{
    printf("%20s%8ld%6d%3c\n",student.name,student.num,student.age,student.sex);
}
问题1:为何子函数void list(student)括号里面直接就是student?
问题2:子函数void list(student)下面一行struct stud_type student的作用是什么,为何是出现在这一行?
问题3:main()函数里面的void list(struct stud_type student);有什么作用,为何提到外面就会出错?
问题4:main()为何不能是void main()?
搜索更多相关主题的帖子: include 结构体 Enter 
2016-05-25 15:15
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10610
专家分:43210
注 册:2014-5-20
收藏
得分:0 
哪来的代码?
2016-05-25 15:47
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
问题1:为何子函数void list(student)括号里面直接就是student?
你意思是为啥参数没有数据类型?你加上你认为应该是什么类型的关键字试试呢。是不是因为你下面有一行struct stud_type student;
问题2:子函数void list(student)下面一行struct stud_type student的作用是什么,为何是出现在这一行?
同上,个人理解应该是说明你自定函数参数的类型吧,我把这句注释掉,然后在参数里增加student的数据类型一样效果
问题3:main()函数里面的void list(struct stud_type student);有什么作用,为何提到外面就会出错?
这句应该是你自定义函数list的函数声明,因为你的main在前;你注释掉这句,看下错误提示是不是提示list未声明
问题4:main()为何不能是void main()?
在ANSI C的标准中,main的标准返回值是整型,如果你什么都没有加,编译系统会自动加上int类型的。这时如果你使用GCC的话(VC是没有的)会有一个警告。
void是无类型,表示没有返回值,你的主函数如果不需要返回的话,最好加上它。
最后,建议你的主函数显式的使用int类型,并return 0;这是一个好习惯,开始的时候没什么用,时间长了才能看出来。


[此贴子已经被作者于2016-5-26 09:40编辑过]

2016-05-25 16:09
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
这样你看下是不是比较符合常见写法了
程序代码:
#include<stdio.h>
struct stud_type
{
    char name[20];
    long num;
    int age;
    char sex;
};
void list(struct stud_type student);    //移到外面没出错啊,函数声明 
int main()
{
    
    struct stud_type student[3],*p;
    int i;
    for(i=0,p=student;i<3;p++,i++)
    {
        printf("Enter all data of student%d:\n",i);
        scanf("%s%ld%d%c\n",p->name,&p->num,&p->age,&p->sex);
    }
    for(i=0;i<3;i++)
        list(student[i]);
    return 0;
}
//void list(student)
//struct stud_type student;
void list(struct stud_type student)
{    
    printf("%20s%8ld%6d%3c\n",student.name,student.num,student.age,student.sex);
} 
2016-05-25 16:12
Hugo_D
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2016-5-24
收藏
得分:0 
回复 2楼 吹水佬
一份PPT教材里面的
2016-05-25 16:24
Hugo_D
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2016-5-24
收藏
得分:0 
回复 4楼 wanglianyi1
解释的很清楚,谢谢!
还有个问题,
程序代码:
//void list(student)
//struct stud_type student;
void list(struct stud_type student)

注释和void list(struct stud_type student)这一句是不是具有同等作用,还是有什么区别吗
2016-05-25 16:27
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 6楼 Hugo_D
不好意思哦,我也不是很懂,我只是直觉上感觉一样的,所以这样改了试试。个人理解作用是一样的,不过你的写法好像不常见,不过也可能是我自己看的少而已。

[此贴子已经被作者于2016-5-25 16:34编辑过]

2016-05-25 16:30
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
不过你的程序你编译测试了吗?输入数据部分好像有点问题。第一个学生的姓名,学号,年龄,性别可以正常输入,但是第二之后的就不正常了。所以最后输出也不正常呢

[此贴子已经被作者于2016-5-26 09:41编辑过]

2016-05-25 16:32
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
程序代码:
#include<stdio.h>
struct stud_type
{
    char name[20];
    long num;
    int age;
    char sex;
};
main()
{
    void list(struct stud_type student);
    struct stud_type student[3],*p;
    int i;
    for(i=0,p=student;i<3;p++,i++)
    {
        printf("Enter all data of student%d:\n",i);
       //这里如果考虑让用户知道输入什么内容的话可以考虑做点提示按姓名,学号,年龄,性别输入
        scanf("%s%ld%d%c\n",p->name,&p->num,&p->age,&p->sex);
        getchar();        //这里加个这个,吸收回车
    }
    for(i=0;i<3;i++)
        list(student[i]);
}
void list(student)
struct stud_type student;
{
    printf("%20s%8ld%6d%3c\n",student.name,student.num,student.age,student.sex);
} 


[此贴子已经被作者于2016-5-26 09:42编辑过]

2016-05-25 16:36
Hugo_D
Rank: 1
等 级:新手上路
帖 子:11
专家分:5
注 册:2016-5-24
收藏
得分:0 
回复 9楼 wanglianyi1
是的,加上getchar();后就没有问题了,我刚才还在查找原因,十分感谢!
2016-05-25 17:18
快速回复:请教关于结构体的用法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018531 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved