一个简单的scanf输入问题!!!求指导

ncist_jianeng 2012-06-23 04:53:42

#include<stdio.h>
#include<string.h>
#define M 5 //假设有5个学生
#define N 4 //假设有4门课程
#define MAX 10 //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
*/
struct student
{
char number[MAX]; //学号
float grade[N]; //各科成绩
};
struct student student_grade[M];
int main()
{
int a=0,c=0;
float student_avg[M];
for(a=0;a<M-1;a++)
{
printf("请输入学生学号:\n");
scanf("%s",student_grade[a].number);
fflush(stdin);
student_grade[a].number[MAX-1]='\0';
printf("请输入该学生的各科成绩:\n");
for(c=0;c<N;c++)
{
scanf("%f",&(student_grade[a].grade[c]));
}
}
return 0;
}


scanf("%f",&(student_grade[a].grade[c]));这一句有问题吗,每次到这就死了
...全文
288 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
shiter 2012-06-24
  • 打赏
  • 举报
回复
干嘛老用vc6
wizard_tiger 2012-06-23
  • 打赏
  • 举报
回复
LZ的代码没什么问题,最多也就是在scanf()函数后加一句fflush(stdin);
但个人感觉不加应该也没有关系。
ncist_jianeng 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 的回复:]
但是你发的程序是%f呀?

引用 21 楼 的回复:
自己粗心了,是输入的时候用了%d.

感谢大家的回答
[/Quote]

后面的代码又被我改成%d了。自己的失误。。感谢了
smsgreenlife 2012-06-23
  • 打赏
  • 举报
回复
但是你发的程序是%f呀?
[Quote=引用 21 楼 的回复:]
自己粗心了,是输入的时候用了%d.

感谢大家的回答
[/Quote]
ncist_jianeng 2012-06-23
  • 打赏
  • 举报
回复
自己粗心了,是输入的时候用了%d.

感谢大家的回答
smsgreenlife 2012-06-23
  • 打赏
  • 举报
回复
问题解决了吗,试试我的方法,我就是这样搞定的
[Quote=引用 19 楼 的回复:]
没事,大家都是为了帮我解决问题!!都感谢了
[/Quote]
ncist_jianeng 2012-06-23
  • 打赏
  • 举报
回复
没事,大家都是为了帮我解决问题!!都感谢了
LBSGG 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

C/C++ code

#include<stdio.h>
#include<string.h>
#define M 2 //假设有5个学生
#define N 4 //假设有4门课程
#define MAX 10 //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
*/
struct student
{
……
[/Quote]
不好意思 理解错误 如果的你的结构定义如下就一定要先分配空间
struct student
{
char *number; //学号
double *grade; //各科成绩
};

这程序也可以改成指针数组形式实现
smsgreenlife 2012-06-23
  • 打赏
  • 举报
回复
你觉得楼主的代码有问题吗,否则干嘛修改人家的程序?
[Quote=引用 4 楼 的回复:]
C/C++ code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 5 //假设有5个学生
#define N 4 //假设有4门课程
#define MAX 10 //学号固定为9位
/*
定义一个学生结构体,包含学号……
[/Quote]
ProgrammingRing 2012-06-23
  • 打赏
  • 举报
回复
以下代码VC++6.0无错

#include<stdio.h>
#include<string.h>
#define M 2 //假设有5个学生
#define N 4 //假设有4门课程
#define MAX 10 //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
*/
struct student
{
char number[MAX]; //学号
double grade[N]; //各科成绩
};
struct student student_grade[M];



/*
求每个学生的平均成绩
*/
void studentavg(double student_avg[])
{
int a=0,b=0;
double sum=0;
for(a=0;a<M;a++)
{
sum=0;
for(b=0;b<N;b++)
{
sum+=student_grade[a].grade[b];
}
student_avg[a]=sum/N;
}
}
/*
求每门课的平均成绩
*/
void courseavg(double course_avg[])
{
int a,b;
double sum;
for(a=0;a<N;a++)
{
sum=0;
for(b=0;b<M;b++)
{
sum+=student_grade[b].grade[a];
}
course_avg[a]=sum/M;
printf("%f ",course_avg[a]);
}
}
int main()
{
int a=0,b=0,c=0;
int ch;
double avg[M];
double course_avg[N];
for(a=0;a<=M-1;a++)
{
printf("请输入学生学号:\n");
scanf("%s",student_grade[a].number);
student_grade[a].number[MAX-1]='\0';
printf("请输入该学生的各科成绩:\n");
for(c=0;c<N;c++)
{
scanf("%lf",&(student_grade[a].grade[c])); //每次输入以回车结束
}
while((ch = getchar()) != '\n' && ch != EOF)
;
}
studentavg(avg);
courseavg(course_avg);

/*
输出学生平均成绩
*/
for(a=0;a<M;a++)
{
for(b=0;b<9;b++)
{
putchar(student_grade[a].number[b]);
}
printf("学生的平均成绩是:");
printf("%.3f \n",avg[a]);
}
/*
输出课程平均成绩
*/
for(a=0;a<N;a++)
{
printf("课程%d的平均成绩是:",a+1);
printf("%.3f \n",course_avg[a]);
}
return 0;
}
smsgreenlife 2012-06-23
  • 打赏
  • 举报
回复
我也出现过这样的问题,后来解决了。首先我要说一下4楼的,你不要随便改楼主的代码,因为它的代码没有任何问题,之所以出错是因为VC6.0的bug导致的,在vs2005下就不会有问题。解决问题的办法很多,比如在程序的前面定义一个浮点数,然后再把它输出,等程序正常后在删掉就可以了。
ProgrammingRing 2012-06-23
  • 打赏
  • 举报
回复
浮点库未加载,在scanf前用一下浮点就可了,比如申明个float的变量,如:float x = 0.0
Monkey_D_Luffy 2012-06-23
  • 打赏
  • 举报
回复
q希望能尽早解决吧
youkuxiaobin 2012-06-23
  • 打赏
  • 举报
回复
没觉得有问题啊
ncist_jianeng 2012-06-23
  • 打赏
  • 举报
回复
哦,加类型没错!
输出%f形式全是0.00000
%d,大家懂得,是整形
ncist_jianeng 2012-06-23
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<string.h>
#define M 2 //假设有5个学生
#define N 4 //假设有4门课程
#define MAX 10 //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
*/
struct student
{
char number[MAX]; //学号
double grade[N]; //各科成绩
};
struct student student_grade[M];



/*
求每个学生的平均成绩
*/
studentavg(double student_avg[])
{
int a=0,b=0;
double sum=0;
for(a=0;a<M;a++)
{
sum=0;
for(b=0;b<N;b++)
{
sum+=student_grade[a].grade[b];
}
student_avg[a]=sum/N;
}
}
/*
求每门课的平均成绩
*/
courseavg(double course_avg[])
{
int a,b;
double sum;
for(a=0;a<N;a++)
{
sum=0;
for(b=0;b<M;b++)
{
sum+=student_grade[b].grade[a];
}
course_avg[a]=sum/M;
printf("%f ",course_avg[a]);
}
}
int main()
{
int a=0,b=0,c=0;
double avg[M];
double course_avg[N];
for(a=0;a<=M-1;a++)
{
printf("请输入学生学号:\n");
scanf("%s",student_grade[a].number);
student_grade[a].number[MAX-1]='\0';
printf("请输入该学生的各科成绩:\n");
for(c=0;c<N;c++)
{
scanf("%d",&(student_grade[a].grade[c])); //每次输入以回车结束
}
}
studentavg(avg);
courseavg(course_avg);

/*
输出学生平均成绩
*/
for(a=0;a<M;a++)
{
for(b=0;b<9;b++)
{
putchar(student_grade[a].number[b]);
}
printf("学生的平均成绩是:");
printf("%d \n",avg[a]);
}
/*
输出课程平均成绩
*/
for(a=0;a<N;a++)
{
printf("课程%d的平均成绩是:",a+1);
printf("%f \n",course_avg[a]);
}
return 0;
}



我将float改成double就可以输入了,但是我输出时又有问题了,不能以double形式输出!蛋疼了。
为什么我没分配空间还是可以存值......巧合????
还有我的函数一加void类型就出错!
LBSGG 2012-06-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

C/C++ code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define M 5 //假设有5个学生
#define N 4 //假设有4门课程
#define MAX 10 //学号固定为9位
/*
定义一个学生结构体,包含学号和各科成绩
*……
[/Quote]
四楼 正解 没有分配空间就赋值出错 虽然能编译的过 就像数组越界一样 编译能通过 但赋值时出错
22too 2012-06-23
  • 打赏
  • 举报
回复
经测试发现代码能编译通过!
就是输入成绩时!报错
vc++6.0测试
Code_Talk 2012-06-23
  • 打赏
  • 举报
回复
可以把具体的错误贴上来吗
Code_Talk 2012-06-23
  • 打赏
  • 举报
回复
测试后,没有发现问题。
加载更多回复(5)
******************* 实践教学 ******************* 理工大学 计算机与通信学院 2011年春季学期 C程序设计 课程设计 题 目: 专业班级: 姓 名: 学 号: 指导教师: 成 绩:__________________ 摘 要 在车辆销售管理当中,人工统计的速度慢,并且容易出现差错。本车辆销售管理系统的自动化加速了统计工作,提高管理效率。本程序主要采用对输入的相关信息进行自动分析,然后按组分类将数据保存到数组,这样的结构化非常便于程序后续的统计工作。统计具体过程涉及到车辆进价售价及利润排序等问题,将于正文中详细介绍。本程序实现了所有设计要。 关键词:文件;排序;统计;C语言 目 录 一、需分析 1 二、总体设计 2 三、详细设计 3 3.1 详细设计思路 3 3.2 算法流程图 3 四、编码 7 五、测试 8 六、设计总结 12 参考文献 13 致谢 14 附录 15 一、需分析 本程序将用到文件系统,list.txt文件内容作为数据源,其中单行内容代表一张纸条。程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择。 二、总体设计 图1 车辆销售管理系统功能模块图 三、详细设计 3.1 详细设计思路 1.main()主函数 设置了程序的流程,结束程序。 2.select ( ) 选择函数 选择所想运行的各个函数. 3.functionscan ( ) 输入函数输入便条的数据. 4.function1 ( ) 文件的数据输入函数多次输入数据 5. function2 ( ) 统计函数每种汽车销售量以及销售额的统计 6. functionpaixu2 ( )总额排序函数按销售额对汽车进行排序 7. function4() 总额统计函数统计每种汽车的总额 8. function5() 统计报表函数统计商品总额 9. function6() 清空文件函数 清空文件数据 3.2 算法流程图 3.2.1保存函数Save()的算法流程图如图2所示。 图2 保存函数Save()的算法流程图 3.2.2输入函数input()的算法流程图如图3所示。 图3 输入函数的算法流程图 3.2.3 输出汽车信息 图4 输出汽车信息 四、编码 原始数据有汽车编码,车名,进价,售价,销售数量。年所以定义一个全局结构体数组scrip用于保存原始数据。然后定义全局变量n保存纸条数目,定义数组s用于保存分类后的信息。源代码见附录 五、测试 1输入新数据测试如图5所示 图5 输入新数据测试 2按车名查找数据测试如图6所示 图6按车名查找数据测试 3按编号查找数据测试如图7所示 图7 按编号查找数据测试 4按车辆名称删除数据测试如图8所示 图8车辆名称删除数据测试 5列出所有数据测试如图9所示 图9列出所有数据测试 6统计各产品的收益和总收益测试如图10所示 图10统计各产品的收益和总收益测试 7按车辆销售额的大小排序并输出排序后结果测试如图11所示 图11按车辆销售额的大小排序并输出排序后结果测试 六、设计总结 通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。 回顾起这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多的东西。同时不仅可以巩固了以前所学到的知识,而且学到了很多在书本上所没有学到过的知识,通过这次课程设计使我懂得了理论与实际相结合是很重要的。只有理论知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得出结论。才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,通过同学的帮助,逐渐克服各种问题,并且从中学习到了很多的东西。通过这次编程。我发现了很多的不足。让我了解到自身的问题。让我不断的进步。 参考文献 1 C/C++程序设计,王连相等,中国科学技术出版社,2004 2 C语言程序设计,谭浩强,清华大学出版社,1999 3 C程序设计题解与上机指导,谭浩强,清华大学出版社,1999 4 C语言实用程序荟萃,西安电子科技大学出版社,1993 5 C语言函数手册,机械工业出版社,1999
设计课题一:班级成绩管理系统 一、 问题描述: 对一个有N个学生的班级,每个学生有M门课程。该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。 二、功能要: 1、本系统采用一个结构体数组,每个数据的结构应当包括:学号、姓名、M门课程名称。 2、本系统显示这样的菜单: 请选择系统功能项: a、 成绩录入 b、 成绩显示 c、 成绩保存 d、 成绩排序 e、 成绩修改(要输入密码) f、 成绩统计 (1) 显示每门课程成绩最高的学生的基本信息 (2) 显示每门课程的平均成绩 (3) 显示超过某门课程平均成绩的学生人数 g、 退出系统 3、执行一个具体的功能之后,程序将重新显示菜单。 4、将学生成绩保存到文件中。 三、算法提示: 1、数据结构:结构体类型数组。 2、数据库结构:下表构成该系统的基本数据库。 姓名 学号 课程名称1 课程名称2 ●●●●●● char Char float float 四、测试数据: 学生人数N=10 课程门数M=4 课程名:数学、语文、英语、政治 五、其它 对该系统有兴趣的同学可以在实现上述基本功能后,完善系统的其它功能。 问题补充: 今天谁能给我答案啊!!!!!!!急急!!!!!!! 提问者: 342123465 - 试用期 一级 最佳答案 C语言课程设计报告—班级成绩管理系统 需要分析: 学生成绩管理系统有13种功能。把这13个功能做成13个子函数。在主函当数中设计一个菜单对这13个子数进行管理。来实现对整个系统的操作。 根据课题的要。每一个学生的包括姓名(char)、学号(char)、M门课程的成绩(float).再加上系统功能上的要每一学生的信息还要总分和名次等。所以自然的想到要用结构体来定义每一个学生的信息结构。然后用链表把它们组成一个有序的整体。用对链表的操作来实现对所有学生信息的统一管理(成绩显示、成绩排序、成绩修改等)。最后为了以后按照处理后的顺序保存到文件中。 . 各函数的功能: 概要设计: 程序的模块组成: 主 函 数: int main() 新建函数:STUDENT *init() 输入函数 :STUDENT *create() 显示函数: void print(STUDENT *head) 删除函数: STUDENT *delete(STUDENT *head) 按名字寻找函数: void lookup(STUDENT *head) 保存函数: void save(STUDENT *head) 按总分排序函数: STUDENT *sort(STUDENT *head) 计算总分和均分函数: void computer(STUDENT *h) 修改函数: STUDENT *Modify(STUDENT *head,STUDENT *new) 按学号排序函数: STUDENT *index(STUDENT *h) 菜单函数:int menu_select() 各个函数的主要功能: 输入函数: 随时输入数据。 菜单函数:显示系统主菜单。 显示函数: 显示所有学生的信息。 寻找函数: 方便学生查找自己的成绩。 删除函数: 删除某学生的信息。 排序函数: 按总成绩排序。 按学号排序函数: 按学号排序。 插入函数: 可以插入新的信息。 保存函数: 保存好学生成绩,以免丢失。 统计函数: l 显示每门课程成绩最高的学生的基本信息。 l 显示每门课程的平均成绩。 l 显示超过某门课程平均成绩的学生人数。 课题的功能模块的划分: 开始 菜单界面 功能选择 初始化函数 输入学生信息 删除学生信息 显示学生信息 查找学生信息 按成绩排序 保存到文件 从文件读数据 插入学生成绩 分类合计 退出系统 结束 详细设计: 整个系统除了主函数外,另外还有14个函数,实现八大功能:输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。各个函数的详细设计说明分别如下: 主函数 main() 利用无限次循环for(;;)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。 菜单选择函数 int menu_select() 这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择。等执行完每一个函数功能后,返回菜单。 代码设计: 初始化函数 STUDENT *init() 这是一个无参函数,里面只有两个语句,它的作用是使链表初始化,使head的值为NULL和一个清屏语句。比如:没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧