C 为什么它不返回函数?

C 为什么它不返回函数?,c,function,return,scanf,C,Function,Return,Scanf,我正在写一个转换温度的程序,我已经写了大部分。当我编译并运行程序时,它不进行计算,似乎不识别C/F选项,也不计算重置部分 我做错了什么 #include <stdio.h> #include <ctype.h> float promptTemp(float kelvin) { printf("Please enter a sample temperature in degrees Kelvin:\n"); float convertFahrenheit(flo

我正在写一个转换温度的程序,我已经写了大部分。当我编译并运行程序时,它不进行计算,似乎不识别
C
/
F
选项,也不计算重置部分

我做错了什么

#include <stdio.h>
#include <ctype.h>

float promptTemp(float kelvin)
{
    printf("Please enter a sample temperature in degrees Kelvin:\n");

float convertFahrenheit(float temp)
{

    }while(reset == 'y');

    return(0);
}
#包括
#包括
浮球提示时间(浮球开尔文)
{
printf(“请输入样品温度,单位为开氏度:\n”);
浮子转换器华氏温度(浮子温度)
{
}而(重置=‘y’);
返回(0);
}

代码中的问题是

promptTemp(temp);

你两个都不是

  • 将指向变量的指针作为参数传递
  • 正在收集
    返回值
所以


本质上使用(读取)一个UIInitialized变量
convert
,该变量反过来调用。

代码中的问题是

promptTemp(temp);

你两个都不是

  • 将指向变量的指针作为参数传递
  • 正在收集
    返回值
所以


本质上使用(读取)一个UIInitialized变量
convert
,该变量反过来调用。

您没有将函数的返回值存储在主函数中:

promptTemp(temp);/promptConvert(convert);
试验结果=PrompTemp(温度)

而且你没有把任何东西传给
promptemp()函数

您没有将函数的返回值存储在主函数中:

promptTemp(temp);/promptConvert(convert);
试验结果=PrompTemp(温度)

而且你没有把任何东西传给
promptemp()函数

有几点需要修改:

   promptConvert(convert);
它对
转换
变量没有任何作用。如果要将函数返回的值存储在函数中,请执行以下操作:

   convert = promptConvert(convert);
如果希望函数修改传递给它的变量的值,请执行以下操作:

   char promptConvert(char &convert)   //pass by reference
类似地,对于其他功能,例如:

   temp = convertCelsius(temp);


还有其他一些函数也需要同样的修改,如浮动转换器华氏温度(浮动温度)

有一些东西需要修改:

   promptConvert(convert);
它对
转换
变量没有任何作用。如果要将函数返回的值存储在函数中,请执行以下操作:

   convert = promptConvert(convert);
如果希望函数修改传递给它的变量的值,请执行以下操作:

   char promptConvert(char &convert)   //pass by reference
类似地,对于其他功能,例如:

   temp = convertCelsius(temp);


还有其他一些函数也需要同样的修改,如
浮点转换华氏温度(float temp)

请注意,主函数中变量的值在函数内部正在更改,因为您只传递一个副本,并且只有该副本在函数内部被修改,然后丢失。(即使他们有相同的名字)


尝试将参数作为引用或指针传递。

请注意,主函数中变量的值在函数中正在更改,因为您只传递一个副本,并且只有该副本在函数中被修改,然后丢失。(即使他们有相同的名字)


尝试将参数作为引用或指针传递。

通过使用合适的编译器,此代码中的所有问题都会暴露出来。这种编译器的一个例子是GCC。得到那个,然后正确使用它:

gcc -std=c11 -pedantic-errors -Wall -Wextra
编译器输出:

C:\tmp>gcc test.c -std=c11 -pedantic-errors -Wall -Wextra
test.c: In function 'promptConvert':
test.c:17:5: warning: statement with no effect [-Wunused-value]
     tolower(convert);
     ^
test.c: In function 'promptReset':
test.c:72:5: warning: statement with no effect [-Wunused-value]
     tolower(reset);
     ^
test.c: In function 'main':
test.c:87:9: warning: 'temp' is used uninitialized in this function [-Wuninitial
ized]
         promptTemp(temp);
         ^
test.c:89:9: warning: 'convert' is used uninitialized in this function [-Wuninit
ialized]
         promptConvert(convert);
         ^
test.c:100:9: warning: 'reset' is used uninitialized in this function [-Wuniniti
alized]
         promptReset(reset);
         ^

因此,除了在其他答案中已经指出的bug之外,您还不存储tolower()的返回值。应该是
convert=tolower(convert)

通过使用一个合适的编译器,此代码中的所有问题都将被揭示出来。这种编译器的一个例子是GCC。得到那个,然后正确使用它:

gcc -std=c11 -pedantic-errors -Wall -Wextra
编译器输出:

C:\tmp>gcc test.c -std=c11 -pedantic-errors -Wall -Wextra
test.c: In function 'promptConvert':
test.c:17:5: warning: statement with no effect [-Wunused-value]
     tolower(convert);
     ^
test.c: In function 'promptReset':
test.c:72:5: warning: statement with no effect [-Wunused-value]
     tolower(reset);
     ^
test.c: In function 'main':
test.c:87:9: warning: 'temp' is used uninitialized in this function [-Wuninitial
ized]
         promptTemp(temp);
         ^
test.c:89:9: warning: 'convert' is used uninitialized in this function [-Wuninit
ialized]
         promptConvert(convert);
         ^
test.c:100:9: warning: 'reset' is used uninitialized in this function [-Wuniniti
alized]
         promptReset(reset);
         ^

因此,除了在其他答案中已经指出的bug之外,您还不存储tolower()的返回值。应该是
convert=tolower(convert)

C变量按值传递。这意味着当函数返回时,调用方看不到对传递到函数中的变量所做的任何更改。您需要从每个函数返回一个值,或者传入一个指向要将值存储到其中的变量的指针。@AlanAu我想您的意思是说C变量是按值传递的。@interjay确实如此。手指和大脑没有连接。现在更正。谢谢你把它捡起来。返回语句周围不需要括号。它只是让代码看起来很奇怪。C变量是按值传递的。这意味着当函数返回时,调用方看不到对传递到函数中的变量所做的任何更改。您需要从每个函数返回一个值,或者传入一个指向要将值存储到其中的变量的指针。@AlanAu我想您的意思是说C变量是按值传递的。@interjay确实如此。手指和大脑没有连接。现在更正。谢谢你把它捡起来。返回语句周围不需要括号。这只会让代码看起来很奇怪……真不敢相信我没看到。我已经盯着它看了45分钟了。非常感谢你,苏拉夫!。。。。。真不敢相信我居然没看到。我已经盯着它看了45分钟了。非常感谢你,苏拉夫!