帮忙看看哪错了

iamyangfan 2004-09-08 12:15:16
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数最低的学生数据放在h所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。
#include<stdio.h>
#define M 5
struct student
{
int number;
float score;
};
int fun(struct student *h,struct student *stud)
{
int min=0,k,num=0,m=0;
for(k=0;k<M;k++)
if(stud[k].score<stud[min].score)
min=k;
h[m]=stud[min];
num++;
for(k=0;k<M;k++)
if(stud[k].score==stud[min].score&&min!=k)
{
h[++m]=stud[k];
num++;
}
return num;
}
void main()
{
struct student h[5],s[M];
int k;
printf("input number and score:");
for(k=0;k<M;k++)
scanf("%d%f",&s[k].number,&s[k].score);
printf("jie guo:%d",fun(h,s));}
执行后我刚刚输入:1 85程序就自动退了出来并出现错误提示:
scanf:floating point formats not linked
Abnormal program termination
我试着将结构体类型中的float 改为int ,scanf中的%f改为%d竟然对了,都把我弄糊涂了,请高人指点
...全文
65 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamyangfan 2004-09-08
  • 打赏
  • 举报
回复
哦,原来是这样,书上怎么也不交代一下
zhangfjj 2004-09-08
  • 打赏
  • 举报
回复
Turbo C(TC)系统的浮点连接错误
用TC系统编写小的C程序,如果程序里用到浮点输入,有时运行中会出现下面错误信息:

scanf : floating point formats not linked
Abnormal program termination

这个错误信息的意思是:scanf的浮点格式转换程序没有连接上。

原因:在TC开发时(80年代早期)DOS下的存储资源很有限。因此TC在编译时尽量不加入无关的部分。例如,在没发现需要浮点转换程序时,就不在可执行程序中安装这个部分。而有时TC又不能正确识别实际上确实需要做浮点转换,因此就会出现上面错误。

解决的方法:设法告诉TC需要做浮点数的输入转换,就能解决问题。下面例子里增加了一个double变量并用它输入。

大程序里由于变量很多,只要出现一个线索,TC就会把浮点转换连接上,因此反而不常遇到这个问题。



--------------------------------------------------------------------------------

/* 能导致出现运行错误的程序例子。
在这里用的一个结构数组,结构里面有double类型的成分,TC不能正确识别和处理,因此会导致上述问题。*/
#include <stdio.h>
#define NUM 4

struct entry {
int inum; /* 商品编号 */
int pc; /* 件数 */
double price;/* 价钱 */
} st[NUM]; /* st是个商品表 */

int main () {
int i;
for (i = 0; i < NUM; i++)
scanf("%d %d %lf", &st[i].inum, &st[i].pc, &st[i].price);

for (i = 0; i < NUM; i++)
printf("total price of item %d: %f\n",
st[i].inum, st[i].pc * st[i].price);
return 0;
}

/* 这个程序编译正常,运行中会出现上面错误信息 */



--------------------------------------------------------------------------------

/* 修改的程序,其中增加了一个double变量x。问题就解决了 */
#include <stdio.h>
#define NUM 4

struct entry {
int inum;
int pc;
double price;
} st[NUM];

int main () {
int i;
double x;
for (i = 0; i < NUM; i++) {
scanf("%d %d %lf", &st[i].inum, &st[i].pc, &x);
st[i].price = x;
}

for (i = 0; i < NUM; i++)
printf("total price of item %d: %f\n",
st[i].inum, st[i].pc * st[i].price);
return 0;
}

ma100 2004-09-08
  • 打赏
  • 举报
回复
void main()
{
...
float x;
scanf("%f",&x);//任意输入
...
scanf("%d%f",&s[k].number,&s[k].score);

是编译器的bug,对结构体内的float型,如果别处没有用到float型就会出错
zgy166 2004-09-08
  • 打赏
  • 举报
回复
TC已经远远不符合要求了
你可以用VC呀,GCC呀,都很好用,也方便编辑
ntxs 2004-09-08
  • 打赏
  • 举报
回复
那是因为你老守着古老的TC不放

用新的C++编译器多好,支持标准
ntxs 2004-09-08
  • 打赏
  • 举报
回复
那是我你老守着古老的TC不放

用新的C++编译器多好,支持标准

69,371

社区成员

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

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