| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 967 人关注过本帖
标题:[求助]C语言就构体数组赋值问题
只看楼主 加入收藏
hughyjy
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-6
收藏
 问题点数:0 回复次数:4 
[求助]C语言就构体数组赋值问题

结构体数组赋值问题我在使用结构体数组的时候遇到这个问题,想了好长时间也没弄明白其中的原因,程序如下:

main()
{
struct abc
{
char name;
int a;
float b;
};
struct abc stu[3];
int i;
printf("please input:\n");
for(i=0;i<3;i++)
scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b);
printf("you just input:\n");
for(i=0;i<3;i++)
printf("%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b);
}

这是一个试验程序,在给结构体数组赋值后就原样输出以验证赋值是否正确。但是程序执行时没有显示结果即退出。报告的错误信息是:scanf:floating point formats not linked 。把结构体数组改成只有一个结构体变量,程序如下:

main()
{
struct abc
{
char name;
int a;
float b;
};
struct abc stu;
printf("please input:\n");
scanf("%c %d %f",&stu.name,&stu.a,&stu.b);
printf("%5c%10d%10.2f",stu.name,stu.a,stu.b);
}

编译执行,可以得到预期结果。我想验证是不是循环的问题,又将程序改成下面这样:不要求输入数据,而在程序内部给结构体变量数组赋初值,然后再用循环输出,程序如下:

main()
{
struct abc
{char name;
int a;
float b;
};
struct abc stu[3] = {{'a',12,34},{'b',56,78},{'c',90,12}};
int i;
for(i=0;i<3;i++)
printf("\n%-5c%-10d%-10.2f",stu[i].name,stu[i].a,stu[i].b);
}

编译执行,能够得到正确结果。
再改成下面这样:
main()
{
struct abc
{
char name;
int a;
float b;
};
struct abc stu[3];
int i;
printf("please input:\n");
scanf("%c %d %f",&stu[0].name,&stu[0].a,&stu[0].b);
printf("you just input:\n");
printf("%-5c%-10d%-10.2f",stu[0].name,stu[0].a,stu[0].b);
}
可以顺利正确执行;
还有就是如果结构体成员没有float类型的话是不存在上述问题的;

最后确定是在对有float类型成员的结构体数组用循环方式赋值是出的问题。但是问什么会有这样的问题呢?请高手帮忙解决一下。谢谢!!

搜索更多相关主题的帖子: C语言 赋值 
2007-05-13 22:16
xiawenjin
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2007-5-13
收藏
得分:0 

我也遇到过这个问题,有没有人可以帮忙啊

2007-05-13 22:26
hughyjy
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2006-11-6
收藏
得分:0 

这个问题已经解决了。这是tc的一个BUG。要想实现原来程序,可以有下面两种方法:
1、在文件的开头加上#include"math.h".然后在程序中就构体赋值前调用函数sqrt(0);(求零的平方根,但是结果不用)只是为了打开tc的浮点数支持。
2、在就构体输入值之前加上对一个float类变量输入值语句,如:scanf("%f",&f);同样可以打开tc对浮点数的支持。

2007-05-16 14:46
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
   楼上的方法怎么不行呢?我用的是汉化版,好像结构体对于 打开tc的浮点数 抗拒啊,定义一个float变量还行,但是只要一有触及浮点的东西就报告错误啊。

偶是菜鸟鸟偶惧WHO?!!!!
2007-05-16 15:23
我是菜鸟哦
Rank: 6Rank: 6
等 级:贵宾
威 望:22
帖 子:921
专家分:209
注 册:2007-5-4
收藏
得分:0 
可以的可以的,不过要求太苛刻了,必须在赋予值得上一步执行才可,再往上就不行了,还有楼主你的输入方法有错哦
scanf("%c %d %f",&stu[i].name,&stu[i].a,&stu[i].b); 后边再加个getchar();清除缓冲流

偶是菜鸟鸟偶惧WHO?!!!!
2007-05-16 15:30
快速回复:[求助]C语言就构体数组赋值问题
数据加载中...
 
   



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

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