所以我刚刚学习了指针以及如何在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;
}
答案 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;
}