| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1523 人关注过本帖
标题:为何不能给这个float型的结构体成员输入数据?求教!
只看楼主 加入收藏
laoqiao02
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-6
收藏
 问题点数:0 回复次数:7 
为何不能给这个float型的结构体成员输入数据?求教!
下面这个程序设计输入4个字符串,每个字符串后面跟一个单精度型数据,如:beijing,36.20 ;  shanghai,35.60 ;   tianjin,34.86  ;   shenzhen,38.68 ; 但没法向结构体成员“float  jia”中输入数据,将程序中这个成员的数据类型改为int型就没问题了,真弄不懂哪儿错了,是怎么回事?请指教!

#include<stdio.h>
#define N 4
int i,j;
struct shu
{
 char ming[16];
 float jia;
};
void zhao(struct shu *,int);
main()
{
 static struct shu s[N],*p=s;
 int a;
 
 for(a=0;a<N;a++)
 scanf("%s,%f",(p+a)->ming,&(p+a)->jia);

 for(a=0;a<N;a++)
 printf("%s,%f",(p+a)->ming,(p+a)->jia);
 printf("\n");

 zhao(p,N);
 printf("max:\n");
 printf("%s,%f\n",(p+i)->ming,(p+i)->jia);
 printf("low:\n");
 printf("%s,%f\n",(p+j)->ming,(p+j)->jia);
 system("pause");
}
void zhao(struct shu *p,int n)
{
 int d;
 float max,low;
 max=p->jia;
 low=p->jia;
 for(d=0;d<n;d++)
  {
   if(((p+d)->jia)>max)
    {
     max=(p+d)->jia;
     i=d;
    }
   if(((p+d)->jia)<low)
    {
     low=(p+d)->jia;
     j=d;
    }
  }
}
搜索更多相关主题的帖子: float 结构体 成员 数据 
2008-11-08 10:49
wentaiyou
Rank: 2
等 级:论坛游民
帖 子:68
专家分:17
注 册:2004-12-3
收藏
得分:0 
#include<stdio.h>
#define N 2

int i,j;

struct shu
{
  char ming[16];
  float jia;
};

void zhao(struct shu *,int);

main()
{
  static struct shu s[N],*p=s;
  int a;

  for(a=0;a<N;a++)
    scanf("%s%f",&(p+a)->ming,&(p+a)->jia);

  for(a=0;a<N;a++)
    printf("%s  %f\n",(p+a)->ming,(p+a)->jia);
  printf("\n");

  zhao(p,N);

  printf("max: %s,%f\n",(p+i)->ming,(p+i)->jia);

  printf("low: %s,%f\n",(p+j)->ming,(p+j)->jia);

}

void zhao(struct shu *p,int n)
{
  int d;
  float max,low;
  max=p->jia;
  low=p->jia;
  for(d=0;d<n;d++)
   {
    if(((p+d)->jia)>max)
    {
     max=(p+d)->jia;
     i=d;
    }
   if(((p+d)->jia)<low)
    {
     low=(p+d)->jia;
     j=d;
    }
  }
}


这样可以运行没有错误
在您的代码中有以下地方不对.
for(a=0;a<N;a++)
scanf("%s,%f",(p+a)->ming,&(p+a)->jia);

这里在(p+a)->ming前要有取地址符号

%s , %f有问题换成空格格式就可以了.

假如回到过去.我能做些什么? 还是和现在这样有时间没事情?
2008-11-08 16:59
laoqiao02
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-6
收藏
得分:0 
还是不行啊!
谢谢您!不过,我运行了您改过的程序,还是不行啊,不能正确显示输入内容啊。不知道怎么回事——!
2008-11-08 21:48
laoqiao02
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-6
收藏
得分:0 
不同的编译系统结果不同
用winTC调试不行,但用VC++6.0却可以,为什么呀?
2008-11-08 22:14
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
----------

    似乎是我遇到的问题,这是编译系统对浮点数的支持不太好的缘故。我以前也遇到过这类问题,我都是加一个中间变量,然后再赋值,就解决了。

   如:
    float tmp;
    for(a=0;a<N;a++)
    {
        scanf("%s%f",&(p+a)->ming,&tmp);
        p+a)->jia=tmp;
    }

    你这回再试试看?能不能解决?
2008-11-08 22:17
风居住的街道
Rank: 1
等 级:新手上路
帖 子:374
专家分:0
注 册:2008-10-24
收藏
得分:0 
LS:
这样其实是很迂回而且容易降低效率的解决方法,其实这是因为TC没有载入浮点函数库的原因,你必须手动载入它,随便用个数学函数,比如ldexp(0.0,0);或者sqrt(0.0)什么的就可以了。

PS在以前的发帖中不是多次提到过了的吗?广陵你怎么没记住呢?
2008-11-08 23:03
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
回复 6# 的帖子
对不起,我好象没有看过,不然应该有点印象的。呵,不过,这回记住了,谢谢您。
2008-11-08 23:09
laoqiao02
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2008-11-6
收藏
得分:0 
谢谢各位!
2008-11-09 09:41
快速回复:为何不能给这个float型的结构体成员输入数据?求教!
数据加载中...
 
   



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

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