简单的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试试