| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 330 人关注过本帖
标题:帮看看那错啦
只看楼主 加入收藏
周嘉明
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-11-29
结帖率:75%
收藏
已结贴  问题点数:5 回复次数:3 
帮看看那错啦
#include <stdio.h>
#define    SWN        3    /* 课程数 */
#define NAMELEN        20    /* 姓名最大字符数 */
#define CODELEN        10    /* 学号最大字符数 */
#define FNAMELEN    80    /* 文件名最大字符数 */
#define BUFLEN        80    /* 缓冲区最大字符数 */
/* 课程名称表 */
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"};
struct record
{
    char    name[NAMELEN+1];    /* 姓名 */
    char     code[CODELEN+1];    /* 学号 */
    int     marks[SWN];        /* 各课程成绩 */
    int total;            /* 总分 */
}stu;

struct node
{
    char    name[NAMELEN+1];    /* 姓名 */
    char     code[CODELEN+1];    /* 学号 */
    int     marks[SWN];        /* 各课程成绩 */
    int     total;            /* 总分 */
    struct    node *next;        /* 后续表元指针 */
}*head;    /* 链表首指针 */

int total[SWN];        /* 各课程总分 */
FILE *stfpt;        /* 文件指针 */
char stuf[FNAMELEN];    /* 文件名 */

/* 从指定文件读入一个记录 */
int readrecord(FILE *fpt,struct record *rpt)
{
    char buf[BUFLEN];
    int i;
    if(fscanf(fpt,"%s",buf)!=1)
        return 0;    /* 文件结束 */
    strncpy(rpt->name,buf,NAMELEN);
    fscanf(fpt,"%s",buf);
    strncpy(rpt->code,buf,CODELEN);
    for(i=0;i<SWN;i++)
        fscanf(fpt,"%d",&rpt->marks[i]);
    for(rpt->total=0,i=0;i<SWN;i++)
        rpt->total+=rpt->marks[i];
    return 1;
}
/* 对指定文件写入一个记录 */
writerecord(FILE *fpt,struct record *rpt)
{
    int i;
    fprintf(fpt,"%s\n",rpt->name);
    fprintf(fpt,"%s\n",rpt->code);
    for(i=0;i<SWN;i++)
        fprintf(fpt,"%d\n",rpt->marks[i]);
    return ;
}

/* 显示学生记录 */
displaystu(struct record *rpt)
{
    int i;
    printf("\nName   : %s\n",rpt->name);
    printf("Code   : %s\n",rpt->code);
    printf("Marks  :\n");
    for(i=0;i<SWN;i++)
        printf("       %-15s : %4d\n",schoolwork[i],rpt->marks[i]);
    printf("Total  : %4d\n",rpt->total);
}

/* 计算各单科总分 */
int totalmark(char *fname)
{
    FILE *fp;
    struct record s;
    int count,i;
    if((fp=fopen(fname,"r"))==NULL)
    {
        printf("Can't open file %s.\n",fname);
        return 0;
    }
    for(i=0;i<SWN;i++)
        total[i]=0;
    count=0;
    while(readrecord(fp,&s)!=0)
    {
        for(i=0;i<SWN;i++)
            total[i]+=s.marks[i];
        count++;
    }
    fclose(fp);
    return count;    /* 返回记录数 */
}

/* 列表显示学生信息 */
void liststu(char *fname)
{
    FILE *fp;
    struct record s;
    if((fp=fopen(fname,"r"))==NULL)
    {
        printf("Can't open file %s.\n",fname);
        return ;
    }
    while(readrecord(fp,&s)!=0)
    {
        displaystu(&s);
        printf("\n      Press ENTER to continue...\n");
        while(getchar()!='\n');
    }
    fclose(fp);
    return;
2010-12-01 15:13
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:5 
楼主的主函数没有  
在头文件中加上 #include <string.h>
还有void liststu(char *fname)
少了一个花括号 }
主函数自己写吧  你的那些函数能不能用   
你的那些函数明显写的不合理  你把历遍链表,插入链表,等一些操作都交给主函数完成  
建议你把那些操作写在函数里面
插入的时候用函数来动态创建并插入

                                         
===========深入<----------------->浅出============
2010-12-01 18:43
周嘉明
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2010-11-29
收藏
得分:0 
能不能你帮我直接更改下呢!谢谢2楼的
2010-12-01 20:16
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
看你写的代码应该是刚刚学C语言  我这有个链表框架类  如果你学了C++你可以参考一下

里面的功能基本都有了   
链表类.rar (1.9 KB)

                                         
===========深入<----------------->浅出============
2010-12-01 21:32
快速回复:帮看看那错啦
数据加载中...
 
   



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

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