将`float'赋值给`char [3]'的不兼容类型

时间:2014-02-11 01:51:14

标签: c

试图弄清楚这里发生了什么。我只是在学习C,所以对我很轻松。 :P我被分配创建一个从厘米到英寸的单位转换器。我懂了。现在我想通过创建选项来增加它的味道。我的编译器不喜欢我拥有的东西。这是前几行......

main(void)   

{
float centimeter;
char cnv[3];
float entry;
float oz;
float lb;
float cm;
float lb1;
centimeter=2.54;
lb1=2.2;



printf("Hello. Please type exactly, the type of conversion you would like to do.\n\n1. cm to in\n\n2. lb to kg\n");
scanf("%3c",&cnv);


    if (strcmp(cnv=cm));
        {
        printf("Please enter your length in centimeters:\n");
        scanf("%f",&entry);
        printf("with %.0f centimeters in length, that converts to %.2f inches.",entry,entry/centimeter);
        }

    if (strcmp(cnv=lb));
        {
        printf("Please enter your weight in pounds:\n");
        scanf("%f",&entry);
        printf("with %.0f Pound(s) of weight, that converts to %.2f Kilogram(s).",entry,entry/lb1);
        }


}

它给了我标题中的错误。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

1)你混淆=(赋值)和==(测试平等)

2)您无法直接将数值与字符数组进行比较。您需要将一个或另一个转换为可以比较的类型 - 如果您使用strcmp(),将数字转换为字符串(并了解该函数如何返回其结果,这不是您所假设的)这里),或将字符串转换为数字类型并进行比较。

答案 1 :(得分:0)

strcmp语法不正确。有关字符串比较功能的更多信息,请查看此链接 http://www.tutorialspoint.com/ansi_c/c_strcmp.htm

答案 2 :(得分:0)

  1. '='运算符用于分配值而非比较。您应该使用'=='进行比较。
  2. 您是不同类型的值。您应该将其中一个变量转换为另一个类型进行比较。
  3. 字符串必须与strcmp()之类的字符串比较函数进行比较,但是strcmp()是一个函数,因此你应该用逗号分隔它们来传递参数。
  4. 作为旁边strcmp()在您传入的字符串是等效的时返回0,因此使用更像这样的语法是合适的:if(!strcmp(cnv, cm))if(strcmp(cnv, cm) == 0)

  5. 如果我猜猜你真正想做的事情是这样的:if(strcmp(cnv, "cm") == 0) cm是一个变量的名称,而“cm”是一个带有字符'c'的零终止字符串和'm'

  6. 您需要担心的另一件事是从scanf读取3个字符,因为如果输入为“cm”并且用户按Enter键输入文本。该程序扫描了3个字符,其中一个是换行符'\ n'。因此,当你去strcmp()时,程序会比较每个字符,直到它到达一个已经被清零的字节。只读取3个字符,我不确定你捕获的字符串是否为零终止,但我确信该字符串可能包含一个'\ n',它会将strcmp()的结果抛出。