为什么输出1.#INF

2025-06-30 07:53:53

社区

C语言 帖子详情 为什么输出1.#INF tczf1128 2010-08-12 01:55:58 下面这段代码 为什么输出1.#INF呢,DEV C++环境下

#include

#include

double atof(char s[]);

main()

{

char s[20];

gets(s);

printf("%g\n",atof(s));

getchar();

return 0;

}

double atof(char s[])

{

double val,power;

int i,exp,sign;

for(i = 0; isspace(s[i]); i++)

;

sign = (s[i] == '-') ? -1 : 1;

if(s[i] == '-' || s[i] == '+')

i++;

for(val = 0.0; isdigit(s[i]);i++)

val = val * 10.0 + s[i] - '0';

if(s[i] == '.')

i++;

for(power = 0.0; isdigit(s[i]); i++){

val = val * 10.0 + s[i] - '0';

power *= 10.0;

}

val = sign * val / power;

if(s[i] =='e' || s[i] == 'E'){

sign = (s[i++] == '-') ? -1 : 1;

if(s[i] == '-' || s[i] == '+')

i++;

for(exp = 0; isdigit(s[i]);i++)

exp = 10 *exp +s[i] -'0';

if(sign == 1)

while(exp-- >0)

val *= 10;

else

while(exp-- > 0)

val /= 10;

}

return val;

}

...全文

298 5 打赏 收藏 为什么输出1.#INF 下面这段代码 为什么输出1.#INF呢,DEV C++环境下 #include #include double atof(char s[]); main() { char s[20]; gets(s); printf("%g\n",atof(s)); getchar(); return 0; } double atof(char s[]) { double val,power; int i,exp,sign; for(i = 0; isspace(s[i] 复制链接

扫一扫 分享 转发到动态 举报 AI 作业

写回复 配置赞助广告取 消

确 定

用AI写文章 5 条回复 切换为时间正序 请发表友善的回复… 发表回复 打赏红包 需支付: 0.00 元 取 消 确 定 tczf1128 2010-08-12 打赏举报 回复 谢啦 谢啦

zhaolinger2 2010-08-12 打赏举报 回复 修改后的完整代码如下。以后贴代码的时候注意格式,不然看起来很难受。

#include

#include

double atof(char s[]);

int main()

{

char s[20];

gets(s);

printf("%g\n",atof(s));

getchar();

return 0;

}

double atof(char s[])

{

double val,power;

int i,exp,sign;

for(i = 0; isspace(s[i]); i++)

;

sign = (s[i] == '-') ? -1 : 1;

if(s[i] == '-' || s[i] == '+')

i++;

for(val = 0.0; isdigit(s[i]);i++)

val = val * 10.0 + s[i] - '0';

if(s[i] == '.')

i++;

for(power = 1.0; isdigit(s[i]); i++){//1

val = val * 10.0 + s[i] - '0';

power *= 10.0;

}

val = sign * val / power;

if(s[i] =='e' || s[i] == 'E'){

sign = (s[++i] == '-') ? -1 : 1;//2

if(s[i] == '-' || s[i] == '+')

i++;

for(exp = 0; isdigit(s[i]);i++)

exp = 10 *exp +s[i] -'0';

if(sign == 1)

while(exp-- >0)

val *= 10;

else

while(exp-- > 0)

val /= 10;

}

return val;

}

zhaolinger2 2010-08-12 打赏举报 回复

sign = (s[++i] == '-') ? -1 : 1;//还有这句。明显应该是i先加1再去数组值的。

tczf1128 2010-08-12 打赏举报 回复 改了后输入123e-2 怎么输出12300 zhaolinger2 2010-08-12 打赏举报 回复

for(power = 1.0; isdigit(s[i]); i++){//错在这一句。power的初始值是1,不能是0。

val = val * 10.0 + s[i] - '0';

power *= 10.0;

}

打印浮点数输出 1.#IND 1.#INF nan inf 等解决 进行浮点数编程时,如果没有注意,常常会出现输出类似1.#IND,1.#INF或者nan,inf之类奇怪的输出。这通常隐含了浮点数操作的异常。 特殊浮点数的含义 1.#INF/inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了... 运行代码时输出“1.#INF00”和“1.$”是什么情况 程序运行后 结果屏幕上的DOS窗口中显示的输出值是:“1.#INF00”,而不是一个实型数据 1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double ... -1.#IND,1.#INF 的判断 一般来说是除数为0得出的结果,INF就是infinite,就是无穷大的意思; 使用类似于pow, exp等等函数时常会产生一个无效数字1.#IND00,在VC下可以通过与一个确定数字比较大小来判断是否产生了无效数字,但这个方法在... 浮点数编程常见异常( -1.#IND00, 1.#INF00 nan, inf) 进行浮点数编程时,如果没有注意,常常会出现输出类似 1.#IND, 1.#INF 或者 nan, inf 之类奇怪的输出。这通常隐含了浮点数操作的异常。 特殊浮点数的含义 1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,... C语言调试输出变量为-1.#IND00 -1.#INF00 1.#INF00 -1.#IND00:程序中有不合法的计算,比如对一个负数开根号,或者求log(-1)这些等等; -1.#INF00:计算结果为负无穷,比如求-1/0; 1.#INF00:计算结果为正无穷,比如1/0; ...

C语言

70,020

社区成员

243,266

社区内容

发帖 与我相关 我的任务 C语言 C语言相关问题讨论 复制链接

扫一扫 分享 确定 社区描述 C语言相关问题讨论 社区管理员

加入社区

获取链接或二维码

近7日

近30日

至今

加载中

查看更多榜单

社区公告

暂无公告 试试用AI创作助手写篇文章吧

+ 用AI写文章