为什么输出1.#INF
社区
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写文章