首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

结构体的有关问题(初学)

2012-04-20 
结构体的问题(初学)本人TC3.0环境程序中我定义一个struct st 数组a[3]和一个指针*pa int i请问我可以使

结构体的问题(初学)
本人TC3.0环境

程序中我定义一个struct st 数组a[3]和一个指针*p=a; int i;
请问我可以使用p+i来实现指针指向a的下一个元素吗?
我试过不行,正确的该如何去做?除p<a+3这种方法外。

另外我写的程序在将结构体变量定义float 类型时就会出错
出错内容是 scanf:floating point formats not linked,以下是代码


C/C++ code
#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>

struct st
{
int num;
};
void main()
{
struct st xs[3];
struct st *p;
struct st *q;
xs[0].num = 0;
xs[1].num = 1;
xs[2].num = 2;

p = xs;
q = p+1;

printf("%d",(p+2)->num);

}
运行结果为2
[解决办法]
struct st 数组a[3]和一个指针*p=a; int i;
请问我可以使用p+i来实现指针指向a的下一个元素吗?
我试过不行,正确的该如何去做?除p<a+3这种方法外

*(p+1)==a[1];
*(p+2)==a[2];
你p+i每次移动的是一个结构体的单位,而不是结构体里面的变量。
C/C++ code
#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();}
[解决办法]
C/C++ code
#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");} 

热点排行