读书人

简单的C程序浮点出错。给朋友赶作业

发布时间: 2012-03-07 09:13:51 作者: rapoo

简单的C程序,浮点出错。给朋友赶作业,很急!
一段很短的C语言: TC2.0编译, cmd下运行。


struct city
{
char name[50];
char cap[50];
double pop;
double gdp;
};
void main()
{
int num;
struct city vector[50];
num=creatvector(vector, "a.txt ");
getch();
getch();
getch();
}
int creatvector(struct city* vector,char* filename)
{
int e,i;
FILE* fp=fopen(filename, "r ");
char t[50];
e=fscanf(fp, "%s %s %s %s ",&t,&t,&t,&t);
for(i=0;e!=EOF;i++) /*e!=EOF*/
{
vector[i].pop=vector[i].pop+sqrt(0.0);
e=fscanf(fp, "%s %s %lf %lf ",&vector[i].name,&vector[i].cap,&(vector[i].pop),&(vector[i].gdp));
printf( "%s,%s,%.0lf,%.0lf\n ",vector[i].name,vector[i].cap,vector[i].pop,vector[i].gdp);
}
fclose(fp);
return i;
}

程序用来读取文本中 的 省份、省会、人口 和GDP,不知道为什么,读到第6行就报错。floating point error:domain.

文本中的数据如下:
省份 城市 人口 GDP
peking peking 24000000 772000000000
shanghai shanghai 17780000 1030000000000
tianjin tianjin 10297200 433800000000
chongqing chongqing 31000000 348620000000
heilongjiang Harbin 3300000 210900000000
Jilin Changchun 7400000 193400000000
Liaoning Shenyang 7200000 248300000000
Inner_Mongolia Hohhot 2437900 90000000000
Hebei Shijiazhuang 9395000 206400000000
Xinjiang Urumqi 2350000 65400000000


直到长春那一行还输出正确,但是辽宁,沈阳那一行就报错了。


帮同学赶假期作业,很急。万望各位帮忙。谢谢!

------解决方案--------------------


char t[50];
e=fscanf(fp, "%s %s %s %s ",&t,&t,&t,&t);

最好用四个变量。如:
char name[50], cap[50], pop[50], gdp[50];
e=fscanf(fp, "%s %s %s %s ",&name,&cap,&pop,&gdp);

[解决办法]
回复人:ouyh12345(五岭散人) ( 五级(中级)) 信誉:100 2007-09-11 15:36:49 得分:0
?
char t[50];
e=fscanf(fp, "%s %s %s %s ",&t,&t,&t,&t);

最好用四个变量。如:
char name[50], cap[50], pop[50], gdp[50];
e=fscanf(fp, "%s %s %s %s ",&name,&cap,&pop,&gdp);
==


fscanf(fp, "%s %s %s %s ",name,cap,pop,gdp);
吧?


[解决办法]
2个问题,
一个是
char t[50];
e=fscanf(fp, "%s %s %s %s ",&t,&t,&t,&t);

最好用四个变量。如:
char name[50], cap[50], pop[50], gdp[50];
e=fscanf(fp, "%s %s %s %s ",&name,&cap,&pop,&gdp);

另一个是
e=fscanf(fp, "%s %s %lf %lf ",&vector[i].name,&vector[i].cap,&(vector[i].pop),&(vector[i].gdp));
--
e=fscanf(fp, "%s %s %lf %lf ",vector[i].name,vector[i].cap,&(vector[i].pop),&(vector[i].gdp));

[解决办法]
我运行正确阿,除了EOF不对外
[解决办法]
我在VC下面运行一切正常
[解决办法]
TC中数据大小好象不一样,
int好象是16位,会不会是这个问题?

void main()
{
int num;
struct city vector[50]; // 也可能是这里,栈是否会益处??
num=creatvector(vector, "a.txt ");
getch();
getch();
getch();
}

TC是面向以前的老机器,有些默认环境不一样。
你改为malloc试试

读书人网 >C语言

热点推荐