我这C语言错在哪里?

来源:百度知道 编辑:UC知道 时间:2024/05/10 08:34:11
题目:今有一组数据放在data.txt中,编程找出被3整除的数。要求算出被3整除的数的个数及占的比例,并将结果存放在data3.txt中。
data.txt文件内容:34 56 67 89 56 45 32 56 76 45 32 21 45 56 78 56 8 76 45 32 45 23 12 89 95 32 21 13 78 65 54 56 43 55 32 88 98 98 99 65 43 21 34 57 32 12 15 13 45 29 39 49 58 328 19
以下是我写的代码,没有ERROR,但是运行出来的答案不对,大家看看错在哪里?谢谢!
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,h,l,d,ch,c;
int a[100];
FILE *fp,*pf;
if((fp=fopen("data.txt","r"))==NULL)
{printf("wrong file address!!!\n");
exit(0);
}
else
for(i=0;!feof(fp);i++)
{
putchar(getc(fp));
fscanf(fp,"%d",&ch);
a[i]=ch;
l++;
if(a[i]%3==0)
d++;
}
for(i=0;i<=l;i++)
printf("%d",a[i]);
h=d/l;
pf=fopen("data3.txt","w");
fwrite(&d,1,sizeof(c),pf);
fwrite(&h,1,sizeof(c),pf);
fclose(pf);
}

虽然没有编译错误,但却有运行错误
要知道你这里用的是getc(fp) 这个每次只能得到一个字符,就是说比较“33”你一次只能得到“3”,然后继续下去的话,就会读到空格,如此下去肯定会出问题,而且你参加运算的两个数d,l根本没有初始化,你说能正常吗?还有求概率应该用浮点型,还有fwrite()这个函数,你的参数位置也写错。

下面是我修改后的,你可以看看。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,l,d,ch,c;
double h;
int a[100];
FILE *fp,*pf;

d = 0; //初始化
l = 0; //初始化
if((fp=fopen("c:\\data3.txt","r"))==NULL)
{printf("wrong file address!!!\n");
exit(0);
}
else
for(i=0;fscanf(fp,"%d",&ch)!=EOF;i++)
{
printf("%d ",ch);
//fscanf(fp,"%d",&ch);
a[i]=ch;
l++;
if(a[i]%3==0)
d++;
}

for(i=0;i<=l;i++)
printf("%d ",a[i]);
h=d/(double)l; /*把其中一个数转成double再计算*/
printf("\nh=%f\n",h);
pf=fopen("c:\\data.txt","wb");
fwrite(