2014-11-03 113 views
0

我一直在写一些简单的算法,我面临一个问题。我正在编写一个算法来显示数字的最小和最大数字。它的工作原理,但它只返回两种情况下的最大值,我不明白为什么。非常感谢 !!!为什么我的C++算法总是返回一个数字的最小值和最大值的相同值?

#include <iostream> 

using namespace std; 

void Citire(int& n) 
{ cout <<"\nDa numarul:"; 
    cin >>n; 
    while (n<=0) 
    {cout<<"ai gresit, da natural:"; 
    cin >>n; 
    } 
} 

int CifMinMax(int n) 
{ 
    int Max = 9; 
    int Min = 0; 
    int UltCif; 

    while (n>0) 
    { 
     UltCif = n % 10; 

     if (UltCif < Min) 
      Min = UltCif; 

     if (UltCif > Max) 
      Max = UltCif; 

    n = n/10; 
    } 

    return Max, Min; 
} 

int main() 
{ 
    int n; 
    int Min; 
    int Max; 

    Citire(n); 
    Min = CifMinMax(n); 
    Max = CifMinMax(n); 

    cout <<endl<<Min<<" este cifra minima a numarului, iar "<<Max<<" este cifra maxima a numarului." << endl; 
    return 0; 
} 
+4

你'CifMinMax'函数返回一个'int'。你认为'返回最大值,最小值?'的结果是什么? – 2014-11-03 15:20:25

+2

当你调用两次相同的函数时,为什么你会期望有不同的事情发生? – Daniel 2014-11-03 15:20:38

+0

将函数原型更改为void void CifMinMax(int n,int&Min,int&Max)' – 2014-11-03 15:22:08

回答

8
return Max, Min; 

此行实际上返回Min丢弃Max。阅读关于operator ,它评估它的操作数从左到右并返回最后一个,这就是为什么你得到相同的值。

你需要的东西是这样的:

std::pair<int, int> CifMinMax(int n) 
{ 
    // ... 
    return std::make_pair(Min, Max); 
} 

std::pair<int, int> MinMax = CifMinMax(n); 
Min = MinMax.first; 
Max = MinMax.second; 
+0

但显示它应该是? – Ezekiel 2014-11-03 15:21:51

+0

现在它返回始终0为最小和最大它返回正确。 – Ezekiel 2014-11-03 15:27:59

+0

你期望它为'Min'返回什么?初始化'Min'为0,当'UltCif 0 IIRC的'UltCif = n%10'。我想知道为什么它返回正确的'Max'出于同样的原因。 – Paul 2014-11-03 15:29:49

相关问题