| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2046 人关注过本帖
标题:[求助]用自定义的函数给结构体中的float类型变量赋值 编译 都通过了 运行总 ...
只看楼主 加入收藏
huouh
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-8-2
收藏
 问题点数:0 回复次数:5 
[求助]用自定义的函数给结构体中的float类型变量赋值 编译 都通过了 运行总是出错

#include <stdio.h>
struct stu /*声明一个用于存储学生信息的结构体*/
{
int id;
char name[10];
float score[2];
float ave;
}student,*p_stu;

void input(struct stu *); /*自定义的一个为结构赋值的函数*/
void display(struct stu *);/*自定义显示函数用于 显示学生信息*/

main()
{
p_stu=&student;
input(p_stu);
display(p_stu);
getch();
}
void input(struct stu *s)
{
printf("请输入学号:");
fflush(stdin);
scanf("%d",&s->id);
printf("\n请输入姓名:");
fflush(stdin);
scanf("%d",s->name); /* 学号、姓名都是可以输入的*/

printf("\n请输入成绩1:");
fflush(stdin);
scanf("%f",&s->score[0]); /* 到了这程序就自动退出 。。。。。很是郁闷 ,看了半天,没有发现哪不对啊*/
/*请高手指点一二,谢谢!!!*/
printf("\n请输入成绩2:");
fflush(stdin);
scanf("%f",&s->score[1]);
s->ave = s->score[0]+s->score[1];
}
void display(struct stu *s)
{
printf("学号:%d",s->id);

printf("\n姓名:%s",s->name);


printf("\n成绩1:%5.2f成绩2:%5.2f",s->score[0],s->score[1]);

printf("\n成绩ave:%5.2f",s->ave);
}

搜索更多相关主题的帖子: float stu 赋值 函数 结构体 
2007-08-07 16:14
SpaceC
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2007-6-20
收藏
得分:0 
scanf("%d",s->name);
==>
scanf("%s",s->name);

其他地方没有问题

2007-08-07 16:18
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 
对,除了s-&gt;name那,其他都没问题

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 16:20
huouh
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-8-2
收藏
得分:0 

首先 谢谢两位了!

scanf("%s",s->name); 该过来了!
但用turbo 2.0 和 Turbo C For Windows V3.5 运行还是不可以!!!!!!
用turbo 2.0 运行后 按Alt + F5 显示下面信息
***************************************************************
请输入学号:12

请输入姓名:huouh

请输入成绩1: scanf : floating point formats not linked
Abnormal program termination
*****************************************************************

2007-08-07 16:37
boot2046
Rank: 2
等 级:新手上路
威 望:3
帖 子:168
专家分:0
注 册:2007-7-23
收藏
得分:0 

TC开发时(80年代)DOS下的存储资源紧缺,因此TC在编译时尽量不加入无关部分。在没发现需要做浮点转换时,就不将这个部分安装到可执行程序里。但有时TC不能正确识别实际确实需要浮点转换,因此就会出现上面错误。

解决方法设法告诉TC需要做浮点数输入转换。

struct内的float不能用 scanf来读,是TC的一个Bug


下面例子里增加了一个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;
}


搜出来的,参考一下吧

Linux是简单的,你不需要成为天才也能理解这种简单,Windows是复杂的,就算你是天才也不能理解这种复杂
2007-08-07 16:42
huouh
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-8-2
收藏
得分:0 

ok !
重新定义了个参数,问题解决了!
谢谢boot2046 !

2007-08-07 17:11
快速回复:[求助]用自定义的函数给结构体中的float类型变量赋值 编译 都通过了 运 ...
数据加载中...
 
   



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

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