2015-06-20 203 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