如何对存储为char类型的数字执行sqrt平方根函数运算?
问题根因
你遇到的计算错误核心原因是 char类型存储的数字字符实际保存的是对应ASCII编码值,而非数字本身的数值:
- 数字字符
'0'`'9'`对应的ASCII十进制值为4857,你直接将input传入sqrt函数时,实际参与运算的是ASCII值,比如input为'5'时,实际计算的是sqrt(53),自然无法得到正确结果。
修复方案
只需要先把数字字符转换为对应的整数值再传入sqrt即可,转换逻辑非常简单:利用ASCII码中数字字符连续排列的特性,用input - '0'即可得到对应整数值。修改后的代码片段如下:
if ((input >= '0') && input <= '9'){ // 将字符转为对应整数 int digit_val = input - '0'; double squareRoot = sqrt(digit_val); printf ("%c is a digit.\nThe square root of %d is %0.2lf", input, digit_val, squareRoot); }
额外注意:原代码中printf的第二个占位符用了%c,修改后替换为%d输出整数值,符合打印数字的语义。
内容的提问来源于stack exchange,提问作者Jesse Proctor
相关产品推荐
相关产品推荐

