c语言。。到底问题出在哪里 啊???

来源:百度知道 编辑:UC知道 时间:2024/06/18 06:58:46
下列程序的功能是:在3位整数(100至999)中寻找符合下面条件的整数,并依次从小到大存入数组b中;它既是完全平方数,又有两位数字相同,例如144,676等。
#include <stdio.h>
int jsValue(int bb[ ])
{int i,a,b,c,j=0;
for(i=10;i<32;i++)
{a=i*i%10;
b=(i*i/10)%10;
c=i*i/100;
if(a==b||a==c||c==b)
{bb[j]=i*i;j++;}
}
}
main()
{
int b[20], num ;
num = jsValue(b) ;
writeDat(num, b) ;
}
writeDat(int num, int b[])
{
FILE *out ;
int i ;
out = fopen("OUT12.DAT", "w") ;
fprintf(out, "%d\n", num) ;
for(i = 0 ; i < num ; i++)
fprintf(out, "%d\n", b[i]) ;
fclose(out) ;
}

请同时建立一个名为OUT12.DAT的文件以让其输出。。。但是结果为什么是那样呢??子程序单独提出来,直接用printf输出都可以输出正确的结果,为什么读入bb[]内就多出那么多数来了呢???

应该是3级试题吧
如果打印出来没错的话
试试下面的
int jsValue(int bb[ ])
{int i,a,b,c,j=0;
for(i=10;i<32;i++)
{a=i*i%10;
b=(i*i/10)%10;
c=i*i/100;
if(a==b||a==c||c==b)
{bb[j]=i*i;j++;}
}
return j;
}

因为主函数中的num没有进行初始化
而是依靠jsvalue返回赋值的
而在写入文件时
循环的控制也是依靠num值进行控制的