scanf()没有返回正确的值?

时间:2015-10-25 02:21:14

标签: c

我有一个功能,作为一个更大的程序的一部分,以确定在前一周的每一天销售的产品数量。以下是执行大小写切换的功能:

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()返回的问题吗?

4 个答案:

答案 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"得到一个炭。