2015-10-25 135 views
-1

我有一个功能,作为一个更大的程序的一部分,以确定在前一周的每一天销售的产品数量。这里是执行的情况下切换功能:scanf()没有返回正确的值?

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; 
} 

然而,当程序运行时,它总是跳转到默认,甚至通过5.输入数字1时,这是一个问题,什么scanf()函数将返回?

+0

您应该检查'== 1',而不是'!= EOF'。如果输入的数字不是数字,该函数可能返回'0'。 –

+0

一旦你有超过10种产品,你会怎么做? –

+0

@ M.M:你的意思是,输入像''\ n'',''\ t''和''''? –

回答

0

您似乎在整数和ASCII数字之间感到困惑。您正在执行格式化的提取,但检查productNumber就好像它是在输入中找到的实际ASCII字符。

请记住,'1' is actually 49

既然您想要覆盖像'\n'这样的案例,请改为使用%c代替char。然后提取操作不会像现在这样执行格式转换,并且字符文字比较将是正确的。

0

由于您scanf功能被引用的整数,你只是有你的情况下切换到整数:

case 1: 
//your logic 
break; 
case 2: 
//your logic 
break; 
0

案例“1” - 在这一刻你是问编译器检查你输入一个字符“ 1' - 他的ASCII值是49,这就是他跳到默认情况下的原因。尝试输入“%c”

+0

我说那十二个小时前。 –

0

scanf(“%d”,& productNumber)get productNumber是一个整数。 但是'1':'1'是一个字符,他的ASCII值是49,所以每次输入一个整数时,都没有匹配的情况下跳到默认情况。你可以输入“%c”来获得一个字符。

+0

有几个人已经这样说过了。您的答案似乎没有添加任何信息。另外,请写出适当的英语,这不是写不喜欢m8 –