C - 条件总是跳到'Else'?

时间:2012-02-10 23:30:02

标签: c temperature

我正在学习C,并且正在使用我最近完成的Python书中的一些练习题。我的C书是在邮件中,但我想要先行一步。我正在整理一个简单的温度转换程序,由于某种原因它总是跳到我的条件中的'Else'条款......我确信我错过了一些简单的东西,但我似乎无法弄明白。有什么想法吗?:

#include<stdio.h>

main()
{
float temp_c, temp_f;
char convert_from[1];

printf("Convert from (c or f): ");
scanf("%c", &convert_from);

if(convert_from == "c")
{
    printf("Enter temperature in Celsius: ");
    scanf("%f", &temp_c);

    temp_f=(1.8*temp_c)+32;

    printf("The temperature in Fahreinheit is: %f \n", temp_f);
}

else if(convert_from == "f")
{
    printf("Enter temperature in Fahreinheit: ");
    scanf("%f", &temp_f);

    temp_c=(temp_f/1.8)-32;

    printf("The temperature in Celsius is: %f \n", temp_c);
}

else
    printf("Invalid choice. \n");

}

5 个答案:

答案 0 :(得分:7)

如果您要比较字符,请执行以下操作:

char convert_from; 

printf("Convert from (c or f): "); 
scanf("%c", &convert_from); 

if (convert_from == 'c') 
{ 

否则你无法像这样用字符串文字"c"(注意双引号)进行比较。

答案 1 :(得分:2)

在表达式中:

if (convert_from == "c")

convert_from数组转换为指向char的指针,因此您基本上将指向char的指针与另一指针char进行比较。 "c"是字符串文字,而'c'char(请注意第一种情况下使用"",第二种情况下使用'')。< / p>

使用char convert_from[1];声明,这里是正确的代码:

char convert_from[1];
scanf("%c", convert_from);
if (convert_from[0] == 'c')

但直接使用char代替char的数组1更为自然:

char convert_from;
scanf("%c", &convert_from);
if (convert_from == 'c')

答案 2 :(得分:1)

这里有两个问题。

首先:你只想读一个字符,所以声明

char convert_from;

而不是大小为1的字符数组(如char convert_from[1]所示)。

其次,你需要实际比较一个角色,所以你需要做

if (convert_from == 'c') ...

而不是“c”,因为“foo”是C中的一个字符串,而C又是一个指向常量的指针 字符数组(const char *)。

此外:您使用了哪个编译器?我(llvm-gcc 4.2)警告我这些问题。因此,无论您的编译器是伪造的还是您都迫切需要注意编译器警告。这可能很困难,因为警告没有错误,但警告是有原因的: - )

答案 3 :(得分:1)

在C语言中,你不能使用==来比较字符串(如果你这样做会发生比较的字符串的内存位置,这会在大多数情况下产生不同的结果)。

scanf("%c", &convert_from);也是错误的。数组本身已经衰变为指针,因此scanf("%c", convert_form);就足够了。但是,在这种情况下,convert_form将不包含C库将认为是字符串的内容(字符串在C中以空值终止)。让代码工作的微创改变将会发生变化

if (convert_from == "f") [...]

if (covert_form[0] == 'f') [...]

(注意''而不是“”,这是一个字符文字,它基本上只是一个数字,因此可以使用==进行比较。)

更为惯用的做法是将convert_form声明为char convert_form,然后使用scanf("%c", &convert_form);,这将完成与上述相同的操作。

答案 4 :(得分:0)

首先,因为您一次只能阅读一个角色 将其定义为

  

char convert_from;

接下来不建议直接比较字符串 因此声明应该是

if(convert_from == 'c')