这可能是一个愚蠢的问题,但我真的不明白这是什么错误。该程序适用于除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
答案 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输出