2015-06-20 211 views
1

该函数要求loLimit和hiLimit之间的整数,并允许用户安全地输入它。它会一直询问,直到用户在合法范围内输入一个数字。然后它返回合法的号码。while循环的输出不正确

The correct output should be: 
Please enter an integer between 32 and 127: 19 
Please enter an integer between 32 and 127: 128 
Please enter an integer between 32 and 127: 48 
Please enter an integer between 48 and 127: 47 
Please enter an integer between 48 and 127: 65 

但是,我的输出行为奇怪,好像loLimit值来回变化。此外,输入两次后才会记录数字。

Please enter an integer between 32 and 127: 2 
Please enter an integer between 32 and 127: 150 
Please enter an integer between 32 and 127: 56 
Please enter an integer between 32 and 127: 56 
Please enter an integer between 56 and 127: 66 
Please enter an integer between 32 and 127: 66 
Please enter an integer between 66 and 127: 77 

这里是我的代码:

int enterNumber (int loLimit, int hiLimit){ 
    int min; 
    int max; 

    do { 
    printf("Please enter an integer between %d and %d:\n", loLimit, hiLimit); 
    scanf("%d", &min); 
    } 
    while (min<loLimit || min>hiLimit); 
    return min; 
} 

int main(){ 
    enterNumber(32,127); 
    int min=enterNumber(32,127); 

    enterNumber(min,127); 
    int max=enterNumber(enterNumber(32,127),127); 


} 
+0

[scanf](http://pubs.opengroup.org/onlinepubs/009695399/functions/fscanf.html)函数可能*失败*,因此您应该*总是*测试其结果(成功扫描的项目数) –

回答

3

您调用enterNumber()函数5次,5个接受的值取:通过删除第一

enterNumber(32,127); 
    Please enter an integer between 32 and 127: 56 
    1st accepted number 

    int min=enterNumber(32,127); 
    Please enter an integer between 32 and 127: 56 // 2nd one 
    2nd accepted number 

    enterNumber(min,127); 
    Please enter an integer between 56 and 127: 66 
    3rd accepted answer. 

    int max=enterNumber(enterNumber(32,127),127); //called twice 
    Please enter an integer between 32 and 127: 66 
    Please enter an integer between 66 and 127: 77 
    4th and 5 th accepted answer 

您可以矫正你的逻辑并显示第三次enternumber调用。

int enterNumber (int loLimit, int hiLimit){ 
    int min; 
    int max; 

    do { 
     printf("Please enter an integer between %d and %d:\n", loLimit, hiLimit); 
     scanf("%d", &min); 
     } 
    while (min<loLimit || min>hiLimit); 
    return min; 
    } 

    int main(){ 
// enterNumber(32,127); comment out this 
    int min=enterNumber(32,127); 

    // enterNumber(min,127); 
    int max=enterNumber(min,127); 
    int no=enterNumber(min,max); 

}

首先,它接受一个最小值,则在最大值和最终进入这个范围之间无。

+0

哦,那是正确的!我评论了两条线。但是,当我输入第一个合法价值时,低和高范围仍会提示相同的价值,但仅在我第二次输入合法价值时才会发生变化。有任何想法吗? – Katherine

+0

现在检查@ Katherine.It终于在最小值和最大值之间进入一个no。 –

+0

这并不完全编译,因为编译器会在函数:enterNumber()中引发未使用变量'max'的警告。 – user3629249