请教一个结构类型的问题
各位高手,想请教一个结构类型中的问题。
struct student
{ int age;
char name[10];
float score[5];
}stu[20];
如果已经定义了这样一个结构类型以及这种类型的变量,为什么在用scanf()函数进行结构类型变量的赋值的时候程序会异常终止呢,我查看了C相关的书籍,并没有明确说明C中结构类型的成员如果是数组的话不可以是实数类型啊。
如果成绩定义的是简单变量是可以的,是数组就不可以了,希望高手指点一下。
----------------解决方案--------------------------------------------------------
#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上调试了.
----------------解决方案--------------------------------------------------------
往数组里面用strcpy()~~~!!!
----------------解决方案--------------------------------------------------------
假如你给char name[10]赋值的话就要写成
scanf("%s",&stu[0].name);
而float score[5]可以通过循环给于赋值.
[此贴子已经被作者于2006-1-18 14:10:06编辑过]
----------------解决方案--------------------------------------------------------
假如你给char name[10]赋值的话就要写成
scanf("%s",&stu[0].name);
这样名字应该没法输空格了吧
我想最好用gets();
----------------解决方案--------------------------------------------------------
其实,这个系统很简单,楼主搞复杂了而已
都把他定义成char类型,输入的时候都用gets就可以
简单明了,至于成绩比较的时候,用strcmp(字符串1,字符串2),当函数返回值是0的话就是相等的
----------------解决方案--------------------------------------------------------
楼上说的我不同意,如果做一些关于成绩的运算怎么办呢??
比如算平均和总成绩的话,那又要把字符串转化成数来运算了,反而麻烦了.
再说楼主的这个程序本来就是为学生成绩统计系统做准备的一个基础程序罢了.
----------------解决方案--------------------------------------------------------
用strcopy给数组赋值怎么构造啊...
?
????
我看不如用IF和SCANF配合输入啊
----------------解决方案--------------------------------------------------------
谢谢各位的指点,二楼的程序我很明白,其实我也是这样编的 ,但是在TURBO C 或是WINTC环境中是不可以的,从键盘上输入成绩的时候程序就中止了。我们平时不太使用VC++环境的 。难道是编译器的问题?
我也并没有把这个程序考虑的很复杂,我认为6楼的所说的把成绩定义成一个char类型并不是一个好方法,其实我完全可以把成绩定义成int类型,程序也能够正常运行。但是把成绩数组定义为float,程序在执行时就不能正常执行了,在结构体成员中如果是简单的float类型变量也可以,就是float类型数组不可以。我现在只能解释为编译器的问题了,不知道各位高手有什么高见。
[此贴子已经被作者于2006-1-21 22:29:16编辑过]
----------------解决方案--------------------------------------------------------
不是,因为scanf函数输入字符串的时候不是只把回车键当作字符串的结束符,它把空格也当成是结束符,所以就会有时出现你说的那种问题,用gets函数可以避免这种问题,因为它把空格也当成一个字符接收
另外你说的float数组出问题,究竟是什么问题呢???具体说下吧
----------------解决方案--------------------------------------------------------