使用C语言中的readline功能的温度转换器出现故障

问题描述

所以我试图做一个从摄氏温度到华氏温度的温度转换器,由于某种原因,我的代码输出全部被破坏了。这是我的代码

#include <stdio.h>
#include <stdlib.h>
#include <readline/readline.h>
#include <string.h>

int main(void) 
{
  char *temperature = readline("Enter a temperature in celsius: ");

  double t1 = ((double)*temperature);
  double t2 = ((double)*temperature * 1.8) + 32;
  printf("%f° in Celsius is equivalent to %f° Fahrenheit.",t1,t2);
  return 0;
}

输出

Enter a temperature in celsius: 100
49.000000° in Celsius is equivalent to 120.200000° Fahrenheit.

有人可以告诉我我的代码有什么问题吗?

解决方法

在调用readline之后,temperature包含一个指向缓冲区的指针,该缓冲区包含用户输入的字符串。然后,当您这样做时:

(double)*temperature

您要获取字符串中第一个字符的字符代码,并将其转换为类型double。因此,例如,如果输入为“ 100”。然后,第一个字符是字符'1',其ASCII码为49。这就是为什么要获得所看到的值的原因。

您需要使用strtod函数,该函数将数字的字符串表示形式转换为double

double t1 = strtod(temperature,NULL);
double t2 = (t1 * 1.8) + 32;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...