c ++ Sentinel循环,存储最低和最大数字

问题描述 投票:1回答:3

这是我的计划:

#include <iostream>
using namespace std;

int main(){
    int num;
    int numtotal = 0;
    int numcount = 0;
    int big = 0;
    int low = 0;

    cout<<"enter number or 0 to exit"<<endl;
    cin>>num;
    while(num != 0){
        numtotal = numtotal + num;
        numcount++;
        big = num;
        low = num;

        cout<<"enter number or 0 to extit"<<endl;
        cin>>num;

        if(num < low){
            low = num;
        }
        else if(num > big){
            big = num;
        }
    }

    cout<<"total of numbers: "<<numtotal<<endl;
    cout<<"totoal of numbers entered: "<<numcount<<endl;
    cout<<"biggest number: "<<big<<endl;
    cout<<"lowest number: "<<low<<endl;
}

“低”和“大”输出始终是用户输入的最后2个数字,例如:

( 5, 4, 3, 2)

biggest number: 2

lowest number: 0

我在这做错了什么?谢谢

c++ sentinel
3个回答
1
投票

如果用户在while循环内输入big以获得所需结果,则无需将lownum设置为0

否则,如果你不这样做,你输出的最低数字将始终是0,如果用户只输入正数,我认为你不想要:

#include <iostream>
using namespace std;

int main() {
    int num;
    int total = 0;
    int count = 0;

    cout << "Enter number or 0 to exit" << endl;
    cin >> num;

    int biggest = num;
    int lowest = num;

    while (num != 0) {
        total += num;
        count++;
        cout << "Enter number or 0 to exit" << endl;
        cin >> num;
        if (num != 0) {
            if (num < lowest) {
                lowest = num;
            } else if (num > biggest) {
                biggest = num;
            }
        }
    }

    cout << "Total of numbers: " << total << endl;
    cout << "Amount of numbers entered: " << count << endl;
    cout << "Biggest number: " << biggest << endl;
    cout << "Lowest number: " << lowest << endl;

    return 0;
}

用法示例:

Enter number or 0 to exit
5
Enter number or 0 to exit
4
Enter number or 0 to exit
3
Enter number or 0 to exit
2
Enter number or 0 to exit
0
Total of numbers: 14
Amount of numbers entered: 4
Biggest number: 5
Lowest number: 2

1
投票

您始终将它们设置在循环的顶部。尝试将它们放在循环之外,如下所示:

    cout<<"enter number or 0 to exit"<<endl;
    cin>>num;

    // move them here
    big = num;
    low = num;


    while(num != 0){
        numtotal = numtotal + num;
        numcount++;

        cout<<"enter number or 0 to extit"<<endl;
        cin>>num;

        if(num < low){
            low = num;
        } else if(num > big){
            big = num;
        }
    }


1
投票

你总是用当前的数字覆盖你的循环中的大和低。

这可以通过初始化biglow一次(在循环中)来修复,如下所示:

#include <limits>
int big = std::numeric_limits<int>::min();
int low = std::numeric_limits<int>::max();

并通过将您的循环更改为

while(num != 0) {
    numtotal += num;
    numcount++;

    cout << "enter number or 0 to exit" << endl;
    cin >> num;

    if(num < low)
        low = num;
    // note that this isn't in the else branch anymore
    // to also work if num is the biggest and lowest number
    if(num > big)
        big = num;
}
© www.soinside.com 2019 - 2024. All rights reserved.