一个简单的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]));这一句有问题吗,每次到这就死了
...全文
294 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)

70,020

社区成员

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

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