结构体的问题(初学)
本人TC3.0环境
程序中我定义一个struct st 数组a[3]和一个指针*p=a; int i;
请问我可以使用p+i来实现指针指向a的下一个元素吗?
我试过不行,正确的该如何去做?除p<a+3这种方法外。
另外我写的程序在将结构体变量定义float 类型时就会出错
出错内容是 scanf:floating point formats not linked,以下是代码
#include <stdio.h>#define N 3struct st{ int num; char name[20]; flaot score[3]; float aver;};main(){ struct st xs[N],*p=xs,*pmax=0; int i; float max=0; printf("Etern date:\n"); for (;p<xs+N;p++) { scanf("%d %s ",&p->num,p->name); for (i=0;i<3;i++) { scanf("%f",&p->score[i]); p->aver=p->aver+p->score[i]; } p->aver=p->aver/3.0; if(p->aver>max) { max=p->aver; pmax=p; } } p=xs; printf("--------------------------\nEnter date are:\n"); for (;p<xs+N;p++) { printf("%d %s ",p->num,p->name); for (i=0;i<N;i++) printf("%f ",p->score[i]); printf("\n"); } printf("The max score is:\n\n"); printf("%d %s",pmax->num,pmax->name); for (i=0;i<3;i++) printf("%f ",pmax->score[i]); printf("\n");}#include <stdio.h>#include <string.h>#define N 3struct st{ int num;//4 char name[20];//20 float score[3];//12 float aver;//4}a[3];int main(){ st *p=a; p->num=20; strcpy(p->name,"123456"); *p->score=1.223; *(p->score+1)=120; *(p->score+2)=130; p->aver=48.8; int *m=&p->num; printf("%d ",*m); m++; printf("%s ",m); m+=5; printf("%f ",*(float*)m); m++; printf("%f ",*(float*)m); m++; printf("%f ",*(float*)m); m++; printf("%f ",*(float*)(m)); getchar();}
[解决办法]
#include <stdio.h>#define N 3struct st{ int num; char name[20]; float score[3]; float aver;};main(){ struct st xs[N],*p=xs,*pmax=0; int i; float max=0; printf("Etern date:\n"); for (;p<xs+N;p++) { scanf("%d %s ",&p->num,p->name); for (i=0;i<3;i++) { scanf("%f",&p->score[i]); p->aver=p->aver+p->score[i]; } p->aver=(float)(p->aver/3.0); if(p->aver>max) { max=p->aver; pmax=p; } } p=xs; printf("--------------------------\nEnter date are:\n"); for (;p<xs+N;p++) { printf("%d %s ",p->num,p->name); for (i=0;i<N;i++) printf("%f ",p->score[i]); printf("\n"); } printf("The max score is:\n\n"); printf("%d %s",pmax->num,pmax->name); for (i=0;i<3;i++) printf("%f ",pmax->score[i]); printf("\n");}