2013-10-24 45 views
0

當我運行它時,它給出了一串數字和字母(地址即時猜測)我在哪裏出錯了?我即時試圖顯示最高和最低數字函數改變數組C後指針顯示值

intArray是10號和大小的一維數組= 10

void greatAndSmall(int intsAray[], const int SZ, int greatAdd, int smallAdd)  //def func 
{ 

    while (x < SZ) 
    { 
     if (intsAray[x] > greatAdd) 
      greatAdd = intsAray[x]; 
     else 
      break; 
     if (intsAray[x] < smallAdd) 
      smallAdd = intsAray[x]; 
     else 
      break; 
     x = x + 1; 
    } 
} 

greatAndSmall(intArray, SIZE, &great, &small);  //IN MAIN FUNC 
    cout << "The smallest of these numbers is: " << small << "\n"; //display smallest 
    cout << "The largest of these numbers is: " << great;  //display greatest 
+6

這不可能編譯。 'x'沒有聲明; '&great'和'&small1'是指針,但函數需要'int'類型的參數。顯示你的真實代碼。 –

回答

0

代碼,例如,寫入,是不是有效的C/C++,並且不會編譯。它也有邏輯問題,如果將編譯甚至不能正常工作

只要使用這個代碼(您使用的是break s爲完全是多餘的。):

void greatAndSmall (int intsArray [], int sz, int * largest, int * smallest) 
{ 
    if (sz < 1) return; 
    *largest = *smallest = intsArray[0]; 
    for (int i = 1; i < sz; ++i) 
    { 
     if (intsArray[i] > *largest) *largest = intsArray[i]; 
     if (intsArray[i] < *smallest) *smallest = intsArray[i]; 
    } 
} 

重要提示:這是C代碼。不要一秒鐘認爲,僅僅因爲你使用了cout,這可以算作C++代碼。

只是作比較,這是一個如何能在C++中這樣寫:

// Largest value in first and smallest value in second 
std::pair<int, int> greatAndSmall (std::vector<int> const & c) 
{ 
    if (c.empty()) return {}; 
    std::pair<int, int> ret (c[0], c[0]); 
    for (unsigned i = 1; i < c.size(); ++i) 
    { 
     if (c[i] > ret.first) ret.first = c[i]; 
     if (c[i] < ret.second) ret.second = c[i]; 
    } 
    return ret; 
} 

或更一般的(誠然更復雜的)版本:

template<typename C> 
auto greatAndSmall (C const & c) 
    -> std::pair<typename C::value_type, typename C::value_type> 
{ 
    if (c.empty()) return {}; 
    auto ret = std::make_pair(*c.begin(), *c.begin()); 
    for (auto const & v : c) 
    { 
     if (v > ret.first) ret.first = v; 
     if (v < ret.second) ret.second = v; 
    } 
    return ret; 
}