为什么C ++中的最小值显示出奇怪的结果?

-1 c++

在这个小程序中,我希望用户提示5个整数,并打印最小值和最大值。逻辑看起来还算不错,尽管如此,该min值仍打印出一个奇怪的负数。

我试图错误地更改变量的名称,以为'min'可能指的是C ++中允许的最小整数值,但结果没有改变。

#include <iostream>
using namespace std;
int main() {
    int numbers[5], min = 0, max = 0;
    cout << "Enter five numbers: ";        // Type a number and press enter

    for (int i = 0; i < 5; i++) {
        cin >> numbers[i];                 // Get user input from the keyboard

        for ( int i = 0; i < 5; i ++ ) {
            if (numbers[i] < min) {
                min = numbers[i];
            } else if (numbers[i] > max) {
                max = numbers[i];
            }
        }
    }

    cout << "Min " << min << "  Max " << max << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Enter five numbers: 4 59 3 34 3 
Min -447342104  Max 59
Run Code Online (Sandbox Code Playgroud)

Rem*_*eau 5

在数组完全填充之前,您正在搜索min/ max值。

您应该使用一个循环读取5个整数,然后在第一个循环结束后查找最小/最大值:

#include <iostream>
using namespace std;

int main() {
    int numbers[5], minNum, maxNum;

    cout << "Enter five numbers: ";                                // Type a number and press enter

    for (int i = 0; i < 5; i++) {
        cin >> numbers[i];                                         // Get user input from the keyboard
    }

    minNum = maxNum = numbers[0];

    for ( int i = 1; i < 5; i ++ ) {
        if (numbers[i] < minNum) {
            minNum = numbers[i];
        }
        if (numbers[i] > maxNum) {
            maxNum = numbers[i];
        }
    }

    cout << "Min " << minNum << "  Max " << maxNum << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以改用标准std::minmax_element()算法:

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int numbers[5];

    cout << "Enter five numbers: ";                                // Type a number and press enter

    for (int i = 0; i < 5; i++) {
        cin >> numbers[i];                                         // Get user input from the keyboard
    }

    pair<int*, int*> nums = minmax_element(numbers, numbers + 5);

    cout << "Min " << *(nums.first) << "  Max " << *(nums.second) << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

或者,你可以使用一个单一的一切循环,不使用多个在所有的循环:

#include <iostream>
using namespace std;

int main() {
    int numbers[5], minNum = 0, maxNum = 0;

    cout << "Enter five numbers: ";        // Type a number and press enter

    for (int i = 0; i < 5; i++) {
        cin >> numbers[i];                 // Get user input from the keyboard

        if (i == 0) {
            minNum = maxNum = numbers[i];
        }
        else {
            if (numbers[i] < minNum) {
                minNum = numbers[i];
            }
            if (numbers[i] > maxNum) {
                maxNum = numbers[i];
            }
        }

        /* or simpler:
        minNum = std::min(minNum, numbers[i]);
        maxNum = std::max(maxNum, numbers[i]);
        */
    }

    cout << "Min " << minNum << "  Max " << maxNum << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

要么:

#include <iostream>
using namespace std;

int main() {
    int numbers[5], minNum, maxNum;

    cout << "Enter five numbers: ";        // Type a number and press enter

    cin >> numbers[0];                 // Get user input from the keyboard
    minNum = maxNum = numbers[i];

    for (int i = 1; i < 5; i++) {
        cin >> numbers[i];                 // Get user input from the keyboard

        if (numbers[i] < minNum) {
            minNum = numbers[i];
        }
        if (numbers[i] > maxNum) {
            maxNum = numbers[i];
        }

        /* or simpler:
        minNum = std::min(minNum, numbers[i]);
        maxNum = std::max(maxNum, numbers[i]);
        */
    }

    cout << "Min " << minNum << "  Max " << maxNum << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)