C 值错误(If..else循环)

C 值错误(If..else循环),c,if-statement,C,If Statement,这可能是一个愚蠢的问题,但我真的不明白这其中的错误是什么。该程序适用于除A以外的所有条件 赋值运算符=与相等运算符==不同 =运算符将右操作数的值分配给其左操作数,同时==比较右操作数和左操作数的值。==生成用于if/else的布尔真/假 else if(card_name[0] == 'A') {val = 11;} 所以val==11检查val是否等于11,而不是别的,这就是为什么会出现错误 一些提示: 否则{ val=原子卡名称; } 如果我输入的不是A、K、Q、J或数字,就会崩溃,比如

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

赋值运算符=与相等运算符==不同


=运算符将右操作数的值分配给其左操作数,同时==比较右操作数和左操作数的值。

==生成用于if/else的布尔真/假

else if(card_name[0] == 'A')
{val = 11;}
所以val==11检查val是否等于11,而不是别的,这就是为什么会出现错误

一些提示:

否则{ val=原子卡名称; }

如果我输入的不是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
}
编辑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 yourfile.c输出,而不是键入gcc-Wall-o output yourcode.c!{val==11;}@Prathamesh-Prabhudesai但是说真的,启用编译器警告,他们可能会警告您。这个问题似乎离题了,因为它是关于一个愚蠢的编程错误,没有人会与问题的标题相关联。我如何启用gcc警告?我是新来的programming@PrathameshPrabhudesai:gcc-墙文件。c@PrathameshPrabhudesai当前位置不客气,别担心,每个人在学习过程中都会犯这个错误。我建议您使用gcc:gcc yourfile.c-o output-Wall编译代码,并设置所有警告。另外,考虑接受其中一个答案,这样有类似问题的人可以很快得到好的答案。如果字符串不包含数字,atoi将返回0而不是崩溃。此外,atoi需要的是char*,而不是char。现在,给它输入一个字符,如card_name[0],这很可能会导致崩溃。@DrakaSAN,谢谢。每一次我都得写上警告?接受答案意味着什么?@Klaslindbkäck:谢谢,我已经接受了edited@PrathameshPrabhudesai:是的,您每次都必须编写-Wall,如果您的操作系统是Linux,您还可以编写一个脚本来添加它。接受答案意味着点击你想要接受的答案左边的V号,它会在你的问题下面显示出来,这样每个人都能很快看到
else if(card_name[0] == 'A')
{val = 11;}
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
}
else
{
    val = atoi(card_name);
    if (val == 0)
    {
        printf("Wrong number\n");
        return -1; //Exit with error
    }
}
if [ $# < 2 ]
then
    gcc -Wall $1
else
    gcc -Wall -o $2 $1
fi