为什么我的 switch case 总是转到 default case?
Why my switch case always goes to default case?
我正在尝试制作一个电阻计算器。所以输入是以欧姆为单位的值,输出将是电阻器的色带。
但是我已经被困在这个问题上有一段时间了,我不确定发生了什么。不管怎样,代码总是转到默认情况。
char a, b, c;
int tolerancia,valor;
printf("enter resistance value: ");
scanf("%i", &valor);
c = valor % 10; // th
b = (valor % 100) / 10; // second digit
a = valor / 100; // first digit
switch (a) //colour band for first digit//
{
case '0':
printf("black ");
break;
case '1':
printf("brown ");
break;
case '2':
printf("red ");
break;
case '3':
printf("orange ");
break;
case '4':
printf("yellow ");
break;
case '5':
printf("green ");
break;
case '6':
printf("blue ");
break;
case '7':
printf("violet ");
break;
case '8':
printf("grey ");
break;
case '9':
printf("white ");
break;
default:
printf("unknown value ");
}
switch case 进行了 3 次(第一个数字、第二个数字和公差)并且在每种情况下输出都是“未知值”
您正在读取一个 int
,但您的开关正在将该 int 的第一个数字与各种字符进行比较。现在,char
是 一个数字类型,所以这个(有点)有效,但是 '0'
的值不等于 0
等等对于所有数字字符。
因此您直接进入默认情况。
更准确地说:
switch (a) {
case 0:
printf("black ");
break;
// etc.
}
您也可以简单地拥有一个字符串数组并使用数字对其进行索引。当然要确保验证 a
是一个有效的索引。
char *colors[] = {
"black", "brown", "red", "orange", "yellow",
"green", "blue", "violet", "grey", "white"
};
if (a >= 0 && a <= 9) {
printf("%s ", colors[a]);
}
else {
printf("unknown value ");
}
这里%i取整数值作为十进制、十六进制或八进制类型的整数值。要以十六进制格式输入值 - 值应由前面的“0x”和八进制格式的值提供。
但是您正在使用 Characters ...而不是 case '1' :
一定要写case 1: 那么就给对了。
我正在尝试制作一个电阻计算器。所以输入是以欧姆为单位的值,输出将是电阻器的色带。
但是我已经被困在这个问题上有一段时间了,我不确定发生了什么。不管怎样,代码总是转到默认情况。
char a, b, c;
int tolerancia,valor;
printf("enter resistance value: ");
scanf("%i", &valor);
c = valor % 10; // th
b = (valor % 100) / 10; // second digit
a = valor / 100; // first digit
switch (a) //colour band for first digit//
{
case '0':
printf("black ");
break;
case '1':
printf("brown ");
break;
case '2':
printf("red ");
break;
case '3':
printf("orange ");
break;
case '4':
printf("yellow ");
break;
case '5':
printf("green ");
break;
case '6':
printf("blue ");
break;
case '7':
printf("violet ");
break;
case '8':
printf("grey ");
break;
case '9':
printf("white ");
break;
default:
printf("unknown value ");
}
switch case 进行了 3 次(第一个数字、第二个数字和公差)并且在每种情况下输出都是“未知值”
您正在读取一个 int
,但您的开关正在将该 int 的第一个数字与各种字符进行比较。现在,char
是 一个数字类型,所以这个(有点)有效,但是 '0'
的值不等于 0
等等对于所有数字字符。
因此您直接进入默认情况。
更准确地说:
switch (a) {
case 0:
printf("black ");
break;
// etc.
}
您也可以简单地拥有一个字符串数组并使用数字对其进行索引。当然要确保验证 a
是一个有效的索引。
char *colors[] = {
"black", "brown", "red", "orange", "yellow",
"green", "blue", "violet", "grey", "white"
};
if (a >= 0 && a <= 9) {
printf("%s ", colors[a]);
}
else {
printf("unknown value ");
}
这里%i取整数值作为十进制、十六进制或八进制类型的整数值。要以十六进制格式输入值 - 值应由前面的“0x”和八进制格式的值提供。 但是您正在使用 Characters ...而不是 case '1' : 一定要写case 1: 那么就给对了。