0

当我运行它时,它会给出一串数字和字母(我猜的地址)我哪里出错了?我试图显示最高和最低的数字

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
4

1 回答 1

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;
}
于 2013-10-24T05:25:47.143 回答