为什么我的 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: 那么就给对了。