2014-04-01 230 views
0

我正在嘗試查找最小值和最大值。我遇到以下兩個問題:查找最大值和最小值

  1. 只輸入負數時,最大值將等於0,而不是輸入的最大值。
  2. 當輸入正數時,我有類似的問題。基本上最小的值將是0而不是輸入的值。

任何提示將不勝感激。

#include <iostream> 
using namespace std; 

int main() 
{ 
    int input; 
    int max = 0; 
    int min = 0; 

    cout << "Enter number: "; 
    while (input != -1) 
    { 
     cin >> input; 
     if(input != -1) 
     { 
      if(input > max) 
      { 
       max = input; 
      } 

      if(input < min) 
      { 
       min = input; 
      } 
     } 
    } 
    cout <<"Max: " << max << " Min " << min << endl; 
} 
+0

問題出在你最初的'max'和'min'值。 – Turix

+0

是的,但我該如何解決它? – ChaseHardin

+0

想一想......你希望'max'儘可能低(因此任何大於它的輸入值都會成爲新的最大值)。而且,相反,你希望'min'儘可能高。你可以在這裏找到常數來幫助你:http://www.cplusplus.com/reference/climits/ – Turix

回答

1

在開始的時候,而不是設置爲0,索要while循環,並設定最低及最高到該號碼之前的第一個號碼。作爲一個方面說明,使用-1作爲接受數字輸入的東西的退出條件可能會導致問題,您可能需要事先詢問數字的數量或檢測非數字輸入來結束程序。

編輯:示例代碼:

int main(int argc, char** argv) 
{ 
int input; 
bool hasInput = false; 
cout << "Enter number: "; 
cin >> input; 
int max = input; 
int min = input; 

cout << "Enter number: "; 
while (cin >> input) 
{ 
    if(input == -1) break; 
    hasInput = true; 
    if(input > max) 
    { 
     max = input; 
    } 
    if(input < min) 
    { 
     min = input; 
    } 
    cout << "Enter number: "; 
} 
    if(hasInput) 
    cout <<"Max: " << max << " Min " << min << endl; 
} 

忘記檢查,如果第一個輸入爲-1 ...我確信你能搞懂這個問題。

+0

謝謝@ user3482801,但我仍然有問題。你能舉個例子嗎?謝謝! – ChaseHardin

1

就像@Turix說的那樣,問題在於你的初始值爲maxmin。您的max值應該是儘可能最小的整數值,以便的任何東西都大於此值,同樣,您的min應該是最大的可能整數值。有了這個,你可以像這樣初始化你的變量:

int max = std::numeric_limits<int>::min(); 
int min = std::numeric_limits<int>::max(); //#include <limits> 
+0

即使首先輸入-1,這種單獨更改也會打印出這些最小/最大值 - 特別容易混淆/誤導爲min> max。 –

3

從你的代碼中,我猜測不會有負數。然後做這樣的事情:

編輯:這部分來自另一個答案將是很好的。

include <iostream> 
using namespace std; 

int main() 

{ 
    int input; 
    int hasInput = 0; 
    int max = std::numeric_limits<int>::min(); 
    int min = std::numeric_limits<int>::max(); //#include <limits> 

    cout << "Enter number: "; 
    while (cin >> input) 
    { 
     if(input == -1) break; 
     hasInput = 1; 
     if(input > max) 
     { 
      max = input; 
     } 
     if(input < min) 
     { 
      min = input; 
     } 
    } 
     if(hasInput == 1) 
     cout <<"Max: " << max << " Min " << min << endl; 
} 
+0

現在,即使首先輸入-1,您的代碼也會打印出這些最小/最大值 - 特別是當min> max時會引起混淆/誤導。很高興看到'while(cin >> input)'... +1。乾杯。 –

+0

@TonyD >>謝謝指出。編輯。 :) – Rashad