RE:整数相除的问题和显示问题?

pvii 2005-11-26 11:10:11
整数相除的问题和显示问题?
代码如下

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
#include <assert.h>
#define LEN 20// 节点的个数


typedef struct _node
{
int k;
int w;
int v;
double vper;
}Node;

Node list[LEN];

void show(const char* title)
{
int i;

if( title != NULL )
{
printf("%s\n",title);
}
for( i = 0 ; i < LEN ; i++ )
{
printf("k:%d\tw:%d\tv:%d\tvper%f\n",list[i].k,list[i].w,list[i].v,list[i].vper);// 问题这里为什么有的list[i].vper 为0.000000?
}
printf("\n");

}
void init()
{
FILE *fp;
char* buf1 = (char*)malloc(50*sizeof(char));
char* buf2 = (char*)malloc(50*sizeof(char));
int i=0;
fp = fopen("data.dat","r");
assert( fp!=NULL);
if( fp != NULL )
{
while( !feof(fp))
{
fscanf(fp,"%s %s\n",buf1,buf2);
if( i < LEN)
{
list[i].k = i;
list[i].w = atoi(buf1);
list[i].v = atoi(buf2);
list[i].vper = list[i].v/list[i].w;//这里可能出问题
i++;
}
}
}
free(buf1);
free(buf2);
show();
}
void main()
{
init():
}

data.dat
533 310
351 834
908 789
554 235
688 475
362 1005
722 216
597 333
300 593
230 995
660 949
856 116
212 760
648 827
496 844
817 29
958 176
151 300
79 513
421 241
...全文
103 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pvii 2005-11-26
  • 打赏
  • 举报
回复
?
没用
tsst 2005-11-26
  • 打赏
  • 举报
回复
xiaocai0001(萧筱雨) 真N,每次都能看到你呀
xiaocai0001 2005-11-26
  • 打赏
  • 举报
回复
整数除以整数, 得到的结果还是整数
比如5/3如果不做强制类型转换, 得到的结果将是1
3/5 结果是0

所以 list[i].vper = list[i].v/list[i].w;//这里可能出问题
改为
list[i].vper = (double)ist[i].v/list[i].w;
可能会解决问题

pvii 2005-11-26
  • 打赏
  • 举报
回复
谢谢,可以了
xiaocai0001 2005-11-26
  • 打赏
  • 举报
回复
楼主人品有问题, :) 我改过就行了.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <malloc.h>
#include <assert.h>
#define LEN 20// 节点的个数


typedef struct _node
{
int k;
int w;
int v;
double vper;
}Node;

Node list[LEN];

void show(const char* title)
{
int i;

if( title != NULL )
{
printf("%s\n",title);
}
for( i = 0 ; i < LEN ; i++ )
{
printf("k:%d\tw:%d\tv:%d\tvper%f\n",list[i].k,list[i].w,list[i].v,list[i].vper);// 问题这里为什么有的list[i].vper 为0.000000?
}
printf("\n");

}
void init()
{
FILE *fp;
char* buf1 = (char*)malloc(50*sizeof(char));
char* buf2 = (char*)malloc(50*sizeof(char));
int i=0;
fp = fopen("data.dat","r");
assert( fp!=NULL);
if( fp != NULL )
{
while( !feof(fp))
{
fscanf(fp,"%s %s\n",buf1,buf2);
if( i < LEN)
{
list[i].k = i;
list[i].w = atoi(buf1);
list[i].v = atoi(buf2);
list[i].vper = (double)list[i].v/list[i].w;
i++;
}
}
}
free(buf1);
free(buf2);
show(NULL);
}
void main()
{
init();
}

--------
data.dat内容:
533 310
351 834
908 789
554 235
688 475
362 1005
722 216
597 333
300 593
230 995
660 949
856 116
212 760
648 827
496 844
817 29
958 176
151 300
79 513
421 241

------------------
运行结果:
k:0 w:533 v:310 vper0.581614
k:1 w:351 v:834 vper2.376068
k:2 w:908 v:789 vper0.868943
k:3 w:554 v:235 vper0.424188
k:4 w:688 v:475 vper0.690407
k:5 w:362 v:1005 vper2.776243
k:6 w:722 v:216 vper0.299169
k:7 w:597 v:333 vper0.557789
k:8 w:300 v:593 vper1.976667
k:9 w:230 v:995 vper4.326087
k:10 w:660 v:949 vper1.437879
k:11 w:856 v:116 vper0.135514
k:12 w:212 v:760 vper3.584906
k:13 w:648 v:827 vper1.276235
k:14 w:496 v:844 vper1.701613
k:15 w:817 v:29 vper0.035496
k:16 w:958 v:176 vper0.183716
k:17 w:151 v:300 vper1.986755
k:18 w:79 v:513 vper6.493671
k:19 w:421 v:241 vper0.572447

69,371

社区成员

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

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