我正在嘗試為電阻器制作一個計算器。所以輸入是以歐姆為單位的值,輸出將是電阻器的色帶。
但我已經被困在這一段時間了,我不確定發生了什么。無論如何,代碼總是進入默認情況。
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 ");
}
開關盒進行 3 次(第一位、第二位和公差),在每種情況下,輸出都是“未知值”
uj5u.com熱心網友回復:
您正在閱讀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 ");
}
uj5u.com熱心網友回復:
這里 %i 取整數值作為十進制、十六進制或八進制型別的整數值。要以十六進制格式輸入值 - 值應由前面的“0x”和八進制格式的值提供。但是你正在使用字符......而不是 case '1' :我們必須寫 case 1 :然后它給出正確的。
( https://i.stack.imgur.com/JexcE.jpg )
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/331920.html
上一篇:printf(str)和fwrite(str,1,strlen(str),stdout)之間有什么明顯的區別嗎?
