值错误(If..else循环)

时间:2013-11-29 14:44:02

标签: c if-statement

这可能是一个愚蠢的问题,但我真的不明白这是什么错误。该程序适用于除A的条件之外的所有条件。

#include<stdio.h>
#include<stdlib.h>

int main(void)
{
    char card_name[3];
    puts("Enter the card name: ");
    scanf("%2s",card_name);
    int val = 0;
    //printf("%s",card_name);
    if(card_name[0] == 'K') {
        val = 10;
    }
    else if (card_name[0] == 'Q') {
        val = 10;
    }
    else if (card_name[0] == 'J') {
        val = 10;
    }
    else if (card_name[0] == 'A') {
        val == 11;
    }
    else {
        val = atoi(card_name);
    }

    printf("The card value is %d",val);
    return 0;
}

除A之外的所有输出都是正确的。

Enter the card name: A
The card value is 0

3 个答案:

答案 0 :(得分:5)

赋值运算符=与等于运算符==不同。

else if(card_name[0] == 'A')
{val == 11;}  
      ^remove one =    

=运算符将右操作数的值赋给其左操作数,而==则比较右操作数和左操作数的值。

答案 1 :(得分:0)

else if(card_name[0] == 'A')
{val = 11;}

答案 2 :(得分:0)

==生成if / else

中使用的布尔值(true / false)

所以val == 11检查val是否等于11,没有别的,这就是你输错的原因。

一些提示:

其他{         val = atoi(card_name);     }

如果我输入除A,K,Q,J或数字之外的东西,会崩溃,假设我输入了azerty,你会得到错误的结果。

你要做的是

else if (card_name[0] >= '0' && card_name[0] <= '9') //Check if card_name[0] is a number
{
    val = atoi(card_name);
}
else
{
    printf("Wrong number\n");
    return -1; //Exit with error
}

编辑:纠正KlasLindbäck指出的错误 或者您可以保留您的代码并添加

else
{
    val = atoi(card_name);
    if (val == 0)
    {
        printf("Wrong number\n");
        return -1; //Exit with error
    }
}

编辑2:

假设您使用的是Linux操作系统(Debian,Ubuntu ......)

编写一个名为 compile.sh 的文件,其中包含

if [ $# < 2 ]
then
    gcc -Wall $1
else
    gcc -Wall -o $2 $1
fi

因此,您可以编写 sh compile.sh yourfile.c sh compile.sh,而不是输入 gcc -Wall -o输出yourcode.c 。 yourfile.c输出