C - 函数的意外输出(基本/初学者代码)

时间:2014-02-05 05:41:53

标签: c string function if-statement char

我正在编写一个程序,根据用户的颜色输入计算电阻值。给我带来麻烦的功能是为了获得字符串形式的颜色,并返回匹配的整数值。

但是,尽管进行了各种更改,但它只返回else语句中的值100,这只是main()的一条消息,表明字符串与任何颜色都不匹配。< / p>

未完成的代码如下:

#include <stdio.h>
#include <math.h>

int values123(char c[10]);

void main(void)
{
    int bands = 0;
    char band1[10];
    char band2[10];
    char band3[10];
    char band4[10];
    char band5[10];
    printf("Number of colour bands: ");
    scanf_s("%i", &bands);
    printf("\nBand 1: ");
    scanf_s("%s", band1);
    if (values123(band1) == 100)
    {
        printf("Colour is invalid!");
    }
    fflush(stdin);
    printf("\nBand 2: ");
    scanf_s("%s", band2);
    fflush(stdin);
    printf("\nBand 3: ");
    scanf_s("%s", band3);
    fflush(stdin);
    printf("\nBand 4: ");
    scanf_s("%s", band4);
    fflush(stdin);
    if (bands == 5)
    {
        printf("\nBand 5: ");
        scanf_s("%s", band5);
        fflush(stdin);
    }

    getch();
}
int values123(char c[10])
{
    if (strcmp(c, "black") == 0)
        return (0);
    else if (strcmp(c, "brown") == 0)
        return (1);
    else if (strcmp(c, "red") == 0)
        return (2);
    else if (strcmp(c, "orange") == 0)
        return (3);
    else if (strcmp(c, "yellow") == 0)
        return (4);
    else if (strcmp(c, "green") == 0)
        return (5);
    else if (strcmp(c, "blue") == 0)
        return (6);
    else if (strcmp(c, "violet") == 0)
        return (7);
    else if (strcmp(c, "grey") == 0)
        return (8);
    else if (strcmp(c, "white") == 0)
        return (9);
    else
        return (100);
}

请随时告诉我我所犯的任何错误,无论这些错误是否与问题有关,因为我相信我正在赚钱!

顺便说一句,这不是一个家庭作业问题(就像它看起来一样),我是一名电子工程技术专业的学生,​​并且通过制作与我正在学习的内容有关的课程来练习C :)

谢谢!

1 个答案:

答案 0 :(得分:1)

如果使用==来比较两个字符串,则比较两个字符串的地址是否相等,这肯定是不相等的。请尝试以下

if(strcmp(c, "black") == 0)
{
   return 0;
}

在字符串(字符数组)上使用scanf时,您不需要显式使用&,因为在C数组中默认使用传递地址。

编辑:如果是梯子,则使用else,因为它在类似的集上搜索。