| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 986 人关注过本帖
标题:请教一个结构类型的问题
只看楼主 加入收藏
云卷云舒
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-17
收藏
 问题点数:0 回复次数:12 
请教一个结构类型的问题

请教一个结构类型的问题
各位高手,想请教一个结构类型中的问题。
struct student
{ int age;
char name[10];
float score[5];
}stu[20];
如果已经定义了这样一个结构类型以及这种类型的变量,为什么在用scanf()函数进行结构类型变量的赋值的时候程序会异常终止呢,我查看了C相关的书籍,并没有明确说明C中结构类型的成员如果是数组的话不可以是实数类型啊。
如果成绩定义的是简单变量是可以的,是数组就不可以了,希望高手指点一下。

搜索更多相关主题的帖子: 结构 类型 
2006-01-17 19:48
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
#include<stdio.h>
#include<string.h>
struct student
{
int aga;
char name[20];
float score[3];
};
void main()
{
struct student stu;
struct student *p;
char a[20];
int i;
p=&stu;
gets(a);
strcpy(stu.name, a);
scanf("%d",&p->aga);
for (i=0;i<3;i++)
{
scanf("%f",&p->score[i]);
}
printf("\n");
printf("%s\n%d\n",p->name,p->aga);
for (i=0;i<3;i++)
{
printf("%f\n",p->score[i]);
}
}
我在VC上调试了.

when i want to ask anyone,i will ask myself first.
2006-01-17 20:37
小悟空
Rank: 1
等 级:新手上路
帖 子:218
专家分:0
注 册:2005-5-14
收藏
得分:0 
往数组里面用strcpy()~~~!!!

2006-01-18 11:18
大法师之杖
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-1-11
收藏
得分:0 
假如你给char name[10]赋值的话就要写成
scanf("%s",&stu[0].name);
而float score[5]可以通过循环给于赋值.

[此贴子已经被作者于2006-1-18 14:10:06编辑过]

2006-01-18 14:09
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
以下是引用大法师之杖在2006-1-18 14:09:00的发言:
假如你给char name[10]赋值的话就要写成
scanf("%s",&stu[0].name);


这样名字应该没法输空格了吧
我想最好用gets();


when i want to ask anyone,i will ask myself first.
2006-01-18 16:12
陆哥
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-1-16
收藏
得分:0 
其实,这个系统很简单,楼主搞复杂了而已
都把他定义成char类型,输入的时候都用gets就可以
简单明了,至于成绩比较的时候,用strcmp(字符串1,字符串2),当函数返回值是0的话就是相等的

为中国的软件产业崛起而奋斗终生!!!
2006-01-18 19:40
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
楼上说的我不同意,如果做一些关于成绩的运算怎么办呢??
比如算平均和总成绩的话,那又要把字符串转化成数来运算了,反而麻烦了.
再说楼主的这个程序本来就是为学生成绩统计系统做准备的一个基础程序罢了.


when i want to ask anyone,i will ask myself first.
2006-01-18 19:55
zushuboderen
Rank: 1
等 级:新手上路
帖 子:112
专家分:0
注 册:2005-12-24
收藏
得分:0 

用strcopy给数组赋值怎么构造啊...


????
 我看不如用IF和SCANF配合输入啊


冷静点............. 耐心点.............
2006-01-19 14:37
云卷云舒
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-1-17
收藏
得分:0 

谢谢各位的指点,二楼的程序我很明白,其实我也是这样编的 ,但是在TURBO C 或是WINTC环境中是不可以的,从键盘上输入成绩的时候程序就中止了。我们平时不太使用VC++环境的 。难道是编译器的问题?
我也并没有把这个程序考虑的很复杂,我认为6楼的所说的把成绩定义成一个char类型并不是一个好方法,其实我完全可以把成绩定义成int类型,程序也能够正常运行。但是把成绩数组定义为float,程序在执行时就不能正常执行了,在结构体成员中如果是简单的float类型变量也可以,就是float类型数组不可以。我现在只能解释为编译器的问题了,不知道各位高手有什么高见。

[此贴子已经被作者于2006-1-21 22:29:16编辑过]

2006-01-21 22:25
黑白格子布
Rank: 1
等 级:新手上路
威 望:1
帖 子:67
专家分:0
注 册:2005-12-11
收藏
得分:0 
不是,因为scanf函数输入字符串的时候不是只把回车键当作字符串的结束符,它把空格也当成是结束符,所以就会有时出现你说的那种问题,用gets函数可以避免这种问题,因为它把空格也当成一个字符接收

另外你说的float数组出问题,究竟是什么问题呢???具体说下吧

2006-01-21 22:40
快速回复:请教一个结构类型的问题
数据加载中...
 
   



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

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