| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1014 人关注过本帖
标题:结构处理考试成绩,求总分与平均分出现错误。
只看楼主 加入收藏
陈维巍
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2008-10-30
收藏
 问题点数:0 回复次数:7 
结构处理考试成绩,求总分与平均分出现错误。
#include <stdio.h>
void main()
{
    struct score
    {
    char name;
    int chn,math,eng;
    };
    typedef struct score score;
    score student[10];
    int c_sum=0,m_sum=0,e_sum=0;
    int c_ave,m_ave,e_ave;
    int count;
    int i;
    printf("How many students are there?=====>>>\n");
    scanf("%d",&count);
    for(i=0;i<count;i++)
        {
        printf("Please input the name of student %d=====>\n",i+1);
        scanf("%d",&student[i].name);
        printf("Please input the chinese score of student %d=====>\n",i+1);
        scanf("%d",&student[i].chn);
        c_sum+=student[i].chn;
        printf("Please input the math score of student %d=====>\n",i+1);
        scanf("%d",&student[i].math);
        m_sum+=student[i].math;
        printf("Please input the english score of student %d=====>\n",i+1);
        scanf("%d",&student[i].eng);
        e_sum+=student[i].eng;
        }
    c_ave=(float)c_sum/(float)count;
    m_ave=(float)m_sum/(float)count;
    e_ave=(float)e_sum/(float)count;
    clrscr();
    printf("name    chinese    math    english\n");
    for(i=0;i<count;i++)
        {
         printf("%c    %d    %d    %d\n",student[i].name,student[i].chn,student[i].math,student[i].eng);
        }
    printf("sum   %d    %d    %d\n",c_sum,m_sum,e_sum);
    printf("ave   %d    %d    %d\n",c_ave,m_ave,e_ave);
    getch();

}
搜索更多相关主题的帖子: 平均分 总分 考试 结构 
2008-11-12 17:23
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
学生的名子只有一个char,无法存放多个字节,scanf("%d",&student[i].name);这句把名子当整形输入,如果输入过长,会影响逻辑.
        struct score
    {
        char name[32];//使用字符数组来存放名子
        int chn,math,eng;
    };
/////////////////////////////////
scanf("%s",&student[i].name);
/////////////////////////////////
2008-11-12 19:36
renhongjun
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2008-11-10
收藏
得分:0 
ls说的对啊
2008-11-12 19:43
mona
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2008-11-12
收藏
得分:0 
这个问题好像还是没被解决哦,我把楼主的代码改了一下,发现还是不对头,我也不知道问题出在哪,编译环境为win-tc,以下为程序代码:


#include <stdio.h>
void main()
{
    struct score                        /*定义结构score*/
    {
    char name;                       /*这里定义为char,只让程序接受一个char类型的数据*/
    int chn,math,eng;
    };
    struct score student[10];
    int c_sum=0,m_sum=0,e_sum=0;                /*总分*/
    int c_ave,m_ave,e_ave;                               /*平均分*/
    int count;
    int i;
    printf("How many students are there?=====>>>\n");
    scanf("%d",&count);                                       /*确定学生个数*/
    for(i=0;i<count;i++)
        {
        printf("Please input the name of student %d=====>\n",i+1);
        scanf("%c",&(student[i].name));                                     /*输入姓名*/
        printf("Please input the chinese score of student %d=====>\n",i+1);
        scanf("%d",&(student[i].chn));                                      /*输入成绩*/
        c_sum+=student[i].chn;                                              /*累加单科成绩*/
        printf("Please input the math score of student %d=====>\n",i+1);
        scanf("%d",&(student[i].math));
        m_sum+=student[i].math;
        printf("Please input the english score of student %d=====>\n",i+1);
        scanf("%d",&(student[i].eng));
        e_sum+=student[i].eng;
        }
    c_ave=(float)c_sum/(float)count;         /*求单科平均分*/
    m_ave=(float)m_sum/(float)count;
    e_ave=(float)e_sum/(float)count;

    printf("name    chinese    math    english\n");
    for(i=0;i<count;i++)
        {
         printf("%c    %d    %d    %d\n",student[i].name,student[i].chn,student[i].math,student[i].eng);
        }
    printf("sum   %d    %d    %d\n",c_sum,m_sum,e_sum);
    printf("ave   %5.1f    %5.1f    %5.1f\n",c_ave,m_ave,e_ave);
    getch();

}

运行程序时无法输入姓名的地方被程序自己直接跳过了,根本无法输入。
图片附件: 游客没有浏览图片的权限,请 登录注册


[[it] 本帖最后由 mona 于 2008-11-12 20:05 编辑 [/it]]
2008-11-12 20:01
hokers
Rank: 1
等 级:新手上路
威 望:1
帖 子:102
专家分:0
注 册:2008-11-9
收藏
得分:0 
里面有一段我写的程序,可以参考下https://bbs.bccn.net/thread-243232-1-5.html
2008-11-12 21:13
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf时输入字符后按回车结束(scanf("%d",&count); ),输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了&(student[i].name)。所以,如果你坚持要用一个字符来保存名子的话,只有在scanf("%c",&(student[i].name)); 的前面加一句:
fflush(stdin);//C语言清空输入缓冲区函数,它会把前面的缓冲区清空了,就不至于跳过下一次的输入代码.
还有一种方法就是scanf(" %c",&(student[i].name));//注意在%c前面加了一个空格,这样就可以忽略掉前一个回车符,不过这样的方法需要在输入的时候必须也要先输入一个空格,说实话这样不太好看.
2008-11-14 19:17
debroa723
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:23
帖 子:862
专家分:1954
注 册:2008-10-12
收藏
得分:0 
另外
int c_ave,m_ave,e_ave;                               /*平均分*/
这些变量 你希望是浮点数就应该声明为浮点数,不然
printf("ave   %5.1f    %5.1f    %5.1f\n",c_ave,m_ave,e_ave);
不起作用.
2008-11-14 19:19
陈维巍
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2008-10-30
收藏
得分:0 
回复 7# 的帖子
感谢版主的提醒.

心如止水,宁静致远!
2008-11-15 09:46
快速回复:结构处理考试成绩,求总分与平均分出现错误。
数据加载中...
 
   



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

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