标题:请问为什么红色字体部分是p = head->next->next而不是p = head->next? ...
只看楼主
wgw1993221
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-1-2
结帖率:0
已结贴  问题点数:10 回复次数:1 
请问为什么红色字体部分是p = head->next->next而不是p = head->next?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct StudentInfo
{
    char xh[12];    //学号
    char xm[12];    //姓名
    int  sex;        //性别0-表示女生1-表示男生
    int  dycj;        //德育成绩
    int  zycj;        //智育成绩
    int  tycj;        //体育成绩
    double zhcjpji; //综合测评成绩

    struct StudentInfo *next;
};
struct studentInfo
{
    char xh[12];    //学号
    char xm[12];    //姓名
    int  sex;        //性别0-表示女生1-表示男生
    int  dycj;        //德育成绩
    int  zycj;        //智育成绩
    int  tycj;        //体育成绩
    double zhcjpji; //综合测评成绩
};

struct StudentInfo* Read(int n);

int main ()
{
    struct StudentInfo *Head;

    Head = Read(10);
}

struct StudentInfo* Read(int n)
 {
    FILE *fp;
    int i,num=0;

    if ((fp = fopen("in.dat","rb"))==NULL)
    {
        printf ("cannot open file\n");
    }
    struct StudentInfo *head;
    struct StudentInfo *p,*q;

    p = (struct StudentInfo*)malloc(sizeof(struct StudentInfo));
    q = (struct StudentInfo*)malloc(sizeof(struct StudentInfo));
    head = (struct StudentInfo*)malloc(sizeof(struct StudentInfo));

    head->next = p;

    while (!feof(fp))
    {
        fread(q,sizeof(struct studentInfo),1,fp);
        p->next = q;
        p = q;
        q = (struct StudentInfo*)malloc(sizeof(struct StudentInfo));
        num++;
    }
    num = num-1;//学生总数
    p = NULL;
   
    p = head->next->next;
    for (i=0;i<num;i++)
    {
        if (p->sex==0)
        {
            printf ("%12s%12s 女 %9d%9d%9d%6.2f\n",p->xh,p->xm,p->dycj,p->zycj,p->tycj,p->zhcjpji);
        }
        else
        {
            printf ("%12s%12s 男 %9d%9d%9d%6.2f\n",p->xh,p->xm,p->dycj,p->zycj,p->tycj,p->zhcjpji);
        }
        q = p->next;
        p = q;
    }
    printf ("共有学生%d个",num);

    return head;
 }
搜索更多相关主题的帖子: 姓名 体育 include double 女生 
2012-01-02 11:55
liao06550107
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:2
帖 子:111
专家分:696
注 册:2011-10-2
得分:10 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct StudentInfo
{
    char xh[12];    //学号
    char xm[12];    //姓名
    int  sex;        //性别0-表示女生1-表示男生
    int  dycj;        //德育成绩
    int  zycj;        //智育成绩
    int  tycj;        //体育成绩
    double zhcjpji; //综合测评成绩
};

struct StudentInfo* Read(int n);

int main ()
{
    struct StudentInfo *Head;

    Head = Read(10);
    return 0; //没加返回值
}

struct StudentInfo* Read(int n)
{
    FILE *fp;
    int i,num=0;

    if ((fp = fopen("in.dat","rb"))==NULL)
    {
        printf ("cannot open file\n");
    }
    struct StudentInfo *head;
    struct StudentInfo *p,*q;

    p = (struct StudentInfo*)malloc(sizeof(struct StudentInfo)); //链表第二个结点,没有存储数据(可以去掉)
    q = (struct StudentInfo*)malloc(sizeof(struct StudentInfo)); //
    head = (struct StudentInfo*)malloc(sizeof(struct StudentInfo)); //链表第一个结点,如果去掉上面p的话,该句可以改为(head=p=(struct StudentInfo*)malloc(sizeof(struct StudentInfo));)

    head->next = p; //该句也应去掉!

    while (!feof(fp))
    {
        fread(q,sizeof(struct StudentInfo),1,fp);
        p->next = q; //第一次q指向的是链表第3个节点(作为有数据的第一个结点)
        p = q;
        q = (struct StudentInfo*)malloc(sizeof(struct StudentInfo));
        num++;
    }
    p->next = NULL; //该句没有加。
    num = num-1;//不懂为何减1?
    p = NULL;
   
    p = head->next->next; //表示链表的第三个结点(也就是第一个有数据的结点),如果上面改了的话,该句就应该改为p= head->next;
    for (i=0;i<num;i++)
    {
        if (p->sex==0)
        {
            printf ("%12s%12s 女 %9d%9d%9d%6.2f\n",p->xh,p->xm,p->dycj,p->zycj,p->tycj,p->zhcjpji);
        }
        else
        {
            printf ("%12s%12s 男 %9d%9d%9d%6.2f\n",p->xh,p->xm,p->dycj,p->zycj,p->tycj,p->zhcjpji);
        }
        q = p->next;
        p = q;
    }
    printf ("共有学生%d个",num);

    return head;
} 


[ 本帖最后由 liao06550107 于 2012-1-2 21:20 编辑 ]

听不同的音乐,看不同的书,游历不同的城市,邂逅不同的人,走的多了,站的高了,自然就看的远了。
2012-01-02 21:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359037-1-1.html




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

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