使用C中的指针摄氏温度到华氏温度

时间:2014-10-26 14:42:32

标签: c pointers function-pointers

所以我刚刚学习了指针以及如何在C语言中创建具有单独函数的程序。我将这个华氏度程序改为celcius程序但是我的编译器在我的printf中给出了一个错误:“无效使用void表达式”。

我知道这与我的函数fahrenheit_temperature有关。但是我没有看到如何修复它?我试图将函数更改为double但它不起作用。有任何想法吗?谢谢。

我的代码:

#include <stdio.h>

void fahrenheit_temperature(double celcius_temp, double *fahrenheit_temp){
  *fahrenheit_temp = (9.0 / 5.0) * celcius_temp + 32.0;
}

int main(void){
  double fahrenheit_temp;

printf("Freezing point: %6.2f F.\n", 
     fahrenheit_temperature(0.0, &fahrenheit_temp));

printf("Boiling point: %6.2f F.\n",
     fahrenheit_temperature(100.0, &fahrenheit_temp));

return 0;
}

新代码:

#include <stdio.h>

void fahrenheit_temperature(double celcius_temp, double *fahrenheit_temp){
  *fahrenheit_temp = (9.0 / 5.0) * celcius_temp + 32.0;
}

int main(void){
double fahrenheit_temp, celcius_temp;

printf("Enter degrees celcius: ");
scanf("%lf", &celcius_temp);
fahrenheit_temperature(celcius_temp, &fahrenheit_temp);
printf("The converted temperature is: %f\n", fahrenheit_temp);

return 0;
}

4 个答案:

答案 0 :(得分:2)

fahrenheit_temperature()被声明为void,所以它不返回任何内容,之后没有任何内容传递给printf()

fahrenheit_temp返回后打印变量fahrenheit_temperature()。将fahrenheit_temp传递给printf()而不是fahrenheit_temperature

然后,您可以使用函数的返回值来指示失败/误用。

#include <stdio.h>
#include <errno.h>

#define TEMP_C__TO__TEMP_F (temp_c) \
  ((9.0 / 5.0) * (temp_c) + 32.0)

#define ABSOLUTE_ZERO_TEMP_C (-273.15)
#define ABSOLUTE_ZERO_TEMP_F TEMP_C__TO__TEMP_F(ABSOLUTE_ZERO_TEMP_C)
#define INVALID_TEMP_F (ABSOLUTE_ZERO_TEMP_F - 1.)

int fahrenheit_temperature(double celcius_temp, double *fahrenheit_temp) 
{
  int result = 0;

  if (NULL == fahrenheit_temp)
  {
    result = -1;
    errno = EINVAL;
  }
  else if (ABSOLUTE_ZERO_TEMP_C > celcius_temp) /* It cannot be colder then −273.15 C. */
  {
    result = -1;
    errno = EINVAL;
  }
  else
  {
    *fahrenheit_temp = ABSOLUTE_ZERO_TEMP_C(celcius_temp);
  }

  return result;
}

int main(void)
{
  double fahrenheit_temp = INVALID_TEMP_F;

  if (-1 == fahrenheit_temperature(0.0, &fahrenheit_temp))
  {
    perror("fahrenheit_temperature() failed");
  }
  else
  {
    printf("Freezing point: %6.2f F.\n", fahrenheit_temp);
  }

  /* Test error case 1: */
  fahrenheit_temp = INVALID_TEMP_F;
  if (-1 == fahrenheit_temperature(0.0, -543.21))
  {
    perror("fahrenheit_temperature() failed");
  }
  else
  {
    printf("Test 1 failed: invalid value, should not get here: %6.2f F.\n", fahrenheit_temp);
  }

  /* Test error case 2: */
  fahrenheit_temp = INVALID_TEMP_F;
  if (-1 == fahrenheit_temperature(0.0, NULL))
  {
    perror("fahrenheit_temperature() failed");
  }
  else
  {
    printf("Test 2 failed: invalid value, should not get here: %6.2f F.\n", fahrenheit_temp);
  }

  ...

: - )

答案 1 :(得分:1)

fahrenheit_temperature返回void,因此传递了printf void,因此错误。

答案 2 :(得分:1)

你有一个变量,所以在printf中使用这个变量:

#include <stdio.h>

void fahrenheit_temperature(double celcius_temp, double *fahrenheit_temp){
  *fahrenheit_temp = (9.0 / 5.0) * celcius_temp + 32.0;
}

int main(void){
  double fahrenheit_temp;

fahrenheit_temperature(0.0, &fahrenheit_temp);
printf("Freezing point: %6.2f F.\n",fahrenheit_temp);

fahrenheit_temperature(100.0, &fahrenheit_temp);
printf("Boiling point: %6.2f F.\n",fahrenheit_temp);

return 0;
}

然后您不需要更改函数fahrenheit_temperature的返回类型,只需保留printf语句的函数OUT - 因为它不会返回任何值。

答案 3 :(得分:0)

问题是您需要将值传递给printf。现在你通过被调用函数传递void

可能的最小修复是添加return *fahrenheit_temp;

#include <stdio.h>

double fahrenheit_temperature(double celcius_temp, double *fahrenheit_temp){
    *fahrenheit_temp = (9.0 / 5.0) * celcius_temp + 32.0;
    return *fahrenheit_temp;
}

int main(void){
   double fahrenheit_temp;

   printf("Freezing point: %6.2f F.\n", 
       fahrenheit_temperature(0.0, &fahrenheit_temp));

   printf("Boiling point: %6.2f F.\n",
       fahrenheit_temperature(100.0, &fahrenheit_temp));

   return 0;
}

或者,您可能更喜欢在局部变量中使用存储的值:

#include <stdio.h>

double fahrenheit_temperature(double celcius_temp, double *fahrenheit_temp){
    *fahrenheit_temp = (9.0 / 5.0) * celcius_temp + 32.0;
    return *fahrenheit_temp;
}

int main(void){

    double fahrenheit_temp;
    fahrenheit_temperature(0.0, &fahrenheit_temp);
    printf("Freezing point: %6.2f F.\n", fahrenheit_temp);

    fahrenheit_temperature(100.0, &fahrenheit_temp);
    printf("Boiling point: %6.2f F.\n", fahrenheit_temp);

    return 0;
}