我正在写一个转换温度的程序,我写了大部分内容。当我编译并运行程序时,它不会进行计算,似乎不能识别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);
}
答案 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);