我正在学习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");
}
答案 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')