3

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

}
4

5 回答 5

7

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

char convert_from; 

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

if (convert_from == 'c') 
{ 

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

于 2012-02-10T23:31:42.340 回答
2

在表达式中:

if (convert_from == "c")

convert_fromarray 被转换为指向 的指针char,因此您基本上是将指向 的指针与char指向 的指针进行比较char"c"is a string literal while 'c'is a char(注意""在第一种情况和''第二种情况下的使用)。

有了char convert_from[1];声明,这将是正确的代码:

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

但直接使用 achar而不是数组 1更自然char

char convert_from;
scanf("%c", &convert_from);
if (convert_from == 'c')
于 2012-02-10T23:34:45.943 回答
1

这里有两个问题。

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

char convert_from;

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

其次,您需要与单个角色进行实际比较,因此您需要这样做

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

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

另外:您使用了哪个编译器?我的(llvm-gcc 4.2)警告我这些问题。所以要么你的编译器很假,要么你必须紧急注意编译器警告。这可能很困难,因为警告不是错误,但是,警告是有原因的:-)

于 2012-02-10T23:35:53.690 回答
1

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

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

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

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

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

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

于 2012-02-10T23:39:30.680 回答
0

首先,因为您一次只阅读一个字符,所以将其定义为

字符转换_来自;

接下来不建议直接比较字符串,因此该语句应该是

if(convert_from == 'c')
于 2012-02-11T16:20:51.540 回答