为什么不返回功能?

时间:2015-05-11 10:48:03

标签: 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(float temp)
{

    }while(reset == 'y');

    return(0);
}

5 个答案:

答案 0 :(得分:4)

代码中的问题是

promptTemp(temp);

promptConvert(convert);

你不是

  • 将指针传递给变量作为参数
  • 收集return值。

所以,

 if(convert == 'c')

主要使用(阅读)未初始化的变量convert,后者又会调用undefined behaviour

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

promptTemp(temp);/promptConvert(convert);

尝试result = promptTemp(temp);

而且你也没有传递任何东西      promptTemp()功能

答案 3 :(得分:0)

有一些事情需要修改:

   promptConvert(convert);

它没有对convert变量做任何事情。如果希望函数返回的值存储在函数中,请执行以下操作:

   convert = promptConvert(convert);

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

   char promptConvert(char &convert)   //pass by reference

与其他功能类似,例如:

   temp = convertCelsius(temp);

   float convertCelsius(float &temp)

还有其他功能需要进行相同的修改,例如float convertFahrenheit(float temp)

答案 4 :(得分:0)

通过使用合适的编译器,将揭示此代码中的所有问题。这种编译器的一个例子是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);
         ^

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