我有一个功能,作为一个更大的程序的一部分,以确定在前一周的每一天销售的产品数量。以下是执行大小写切换的功能:
unsigned int switchfn()
{
int productNumber; // product 1 through 5
// only while product 1 through 5 is being entered.
while ((scanf("%d", &productNumber)) != EOF) {
// gather product data
switch (productNumber) {
case '1': // product one
++productOne;
break;
case '2': // product two
++productTwo;
break;
case '3': // product three
++productThree;
break;
case '4': // product four
++productFour;
break;
case '5': // product five
++productFive;
break;
case '\n': // ignore new line
case '\t': // ignore tab
case ' ': // ignore space
break;
default: // catch all other characters
printf("%s", "No such product exists.");
puts(" Please enter a valid product number.");
break;
}
}
return 0;
}
然而,当程序运行时,它总是跳转到默认值,即使输入数字1到5.这是scanf()返回的问题吗?
答案 0 :(得分:0)
您似乎在整数和ASCII数字之间感到困惑。您正在执行格式化提取,但检查productNumber
,就好像它是输入中找到的实际ASCII字符一样。
请记住,'1'
is actually 49
。
由于您也希望涵盖'\n'
等案例,请改为使用char
阅读%c
。然后,提取操作不会像现在那样为您执行格式转换,并且您的字符文字比较将是正确的。
答案 1 :(得分:0)
由于您的scanf
函数引用了一个整数,因此您只需将案例切换为整数:
case 1:
//your logic
break;
case 2:
//your logic
break;
答案 2 :(得分:0)
案例'1' - 此时您要求编译器检查您是否输入了字符'1' - 他的ASCII值为49,这就是他刚刚跳到默认情况的原因。尝试输入“%c”
答案 3 :(得分:0)
scanf("%d",& productNumber)get productNumber是一个整数。 但案例' 1' :' 1'是一个char,他的ASCII值是49,所以每次输入一个整数时,没有匹配的情况只是跳到默认情况。你可以输入" %C"得到一个炭。