2017-02-19 127 views
-3

這一點是找到最小的數字,次最小的數字和最大的數字。然後按升序輸出。然而,當我試圖運行這個程序時,我得到了0,一個指數數字和一個3(輸入的數字是1,2,3)以保持它簡單並確保它工作。我不確定這些奇怪的結果來自哪裏,沒有涉及數學,所以我不確定這些是甚麼可能的。另外,這個練習中不允許使用數組。相信我,我寧願這樣做。排序3個數字yeilds奇怪的結果(C++)

//local variables 
int num1; 
int num2; 
int num3; 
int numSmall; 
int numMid; 
int numLarge; 

//Prompt the user for 3 numbers 
cout << ("Please enter your first number: ")<<endl; 
cin >> num1; 
cout << ("Please enter your second number: ")<<endl; 
cin >> num2; 
cout << ("Please enter your final number: ")<<endl; 
cin >> num3; 

//compare the 3 numbers to find the order 
if (num1 > num2 && num1 > num3){ 
    numLarge = num1; 
    if (num2 > num3){ 
     numMid = num2; 
     numSmall = num3; 
    } 
    else 
     numMid = num3; 
     numSmall = num2; 
} 
else if (num2 > num1 && num2 > num3){ 
    numLarge = num2; 
    if (num1 > num3){ 
     numMid = num1; 
     numSmall = num3; 
    } 
    else 
     numMid = num3; 
     numSmall = num1; 
} 
else{ 
    numLarge = num3; 
    if (num1 > num2){ 
     numMid = num1; 
     numSmall = num2; 
    } 
} 
cout << ("The smallest number is: ") << numSmall << endl; 
cout << ("The next smallest number is: ") << numMid << endl; 
cout << ("The largest number is: ") << numLarge << endl; 


//Pause to read output 
system ("pause"); 

//clear screen to display output 
system ("cls"); 

//Indicate to OS successful termination of program 
return 0; 
+0

解決此類問題的正確工具是您的調試器。在*堆棧溢出問題之前,您應該逐行執行您的代碼。如需更多幫助,請閱讀[如何調試小程序(由Eric Lippert撰寫)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。至少,您應該\編輯您的問題,以包含一個[最小,完整和可驗證](http://stackoverflow.com/help/mcve)示例,該示例再現了您的問題,以及您在調試器。 –

+0

如果在其他內部沒有其他的東西,那麼就有一個控制流程根本不會做任何事情。 –

回答

0

你有兩個問題,解決它們,它會正常工作。 (我檢查)

問題1

更新您的最後一個else塊如下。 [你缺少一個else條件如果num1不大於num2]

else{ 
    numLarge = num3; 
    if (num1 > num2){ 
     numMid = num1; 
     numSmall = num2; 
    }else{ 
     numMid = num2; 
     numSmall = num1; 
    } 
} 

問題2

將大括號中ifelse if條件塊內的else條件。所以,最終的代碼應該如下所示。

if (num1 > num2 && num1 > num3){ 
    numLarge = num1; 
    if (num2 > num3){ 
     numMid = num2; 
     numSmall = num3; 
    }else{ 
     numMid = num3; 
     numSmall = num2; 
    } 
} 
else if (num2 > num1 && num2 > num3){ 
    numLarge = num2; 
    if (num1 > num3){ 
     numMid = num1; 
     numSmall = num3; 
    }else{ 
     numMid = num3; 
     numSmall = num1; 
    } 
} 
else{ 
    numLarge = num3; 
    if (num1 > num2){ 
     numMid = num1; 
     numSmall = num2; 
    }else{ 
     numMid = num2; 
     numSmall = num1; 
    } 
} 
+0

在發佈原始問題後,我注意到了缺少的大括號。之後我忘了編輯它。但最後的另一件事是我仍然失蹤。謝謝您的幫助! –

+0

@JoeBurkhart哦!它很好,如果你的問題解決了!如果您有解決方案,請接受答案。 –

0

看起來你忘了在ifs的最後階段,如果最大的數字是第三個,總會得到錯誤的結果。

+0

這樣簡單的事情讓我感到非常愚蠢,當這是問題所在。謝謝你注意到哈哈。我一遍又一遍地看着這個,試圖看看我錯過了什麼。我以爲我在那裏包括了其他的東西。它現在工作正常,謝謝! –

+0

@JoeBurkhart不要忘記在'else'條件下放大括號。你在你的代碼中錯過了它們。看看我的答案。 –

1

你壓痕是一種誤導:

else 
     numMid = num3; 
     numSmall = num2; 

也許應該是:

else { 
    numMid = num3; 
    numSmall = num2; 
} 

否則,代碼將相當於這一點,我相信沒有什麼你打算這樣做:

else { 
    numMid = num3; 
} 

numSmall = num2; 

也有通過您的程序在其中numMidnumSmall未初始化的邏輯路徑。看看最後的else

如果未初始化int被讀取,則發生未定義行爲,這可能導致各種奇怪的效果。

您應該在編譯器中使用更高的警告級別。例如,具有/W4的Visual C++會立即發現錯誤:

stackoverflow.cpp(58) : warning C4701: potentially uninitialized local variable 'numMid' used 
stackoverflow.cpp(57) : warning C4701: potentially uninitialized local variable 'numSmall' used 
0

已更正的代碼。感謝大家的幫助。

int num1; 
int num2; 
int num3; 
int numSmall; 
int numMid; 
int numLarge; 

cout << ("Please enter three numbers: ")<<endl; 
cin >> num1 >> num2 >> num3; 
if (num1 > num2 && num1 > num3){ 
    numLarge = num1; 
    if (num2 > num3){ 
     numMid = num2; 
     numSmall = num3; 
    } 
    else{ 
     numMid = num3; 
     numSmall = num2; 
    } 
} 
else if (num2 > num1 && num2 > num3){ 
    numLarge = num2; 
    if (num1 > num3){ 
     numMid = num1; 
     numSmall = num3; 
    } 
    else{ 
     numMid = num3; 
     numSmall = num1; 
    } 
} 
else{ 
    numLarge = num3; 
    if (num1 > num2){ 
     numMid = num1; 
     numSmall = num2; 
    } 
    else{ 
     numMid = num2; 
     numSmall = num1; 
    } 
} 
cout << ("The smallest number is: ") << numSmall << endl; 
cout << ("The next smallest number is: ") << numMid << endl; 
cout << ("The largest number is: ") << numLarge << endl; 

system ("pause"); 
system ("cls"); 
return 0;