C ++ Do-while循环无法正常运行

时间:2020-10-15 09:35:42

标签: c++ do-while

int main()
{
    int a; //virknes skaitlis
    int N; //skaitlis
    int count = 0;
    int sum = 0;
    double average;
    int ok;

    do {
        cout << "Ievadiet, cik skaitļu būs virknē: " << endl;
        cin >> a;
        for (int i = 0; i < a; i++) {
            cout << "Ievadiet veselu skaitli: " << endl;
            cin >> N;
            if (N % 2 == 1) {
                count++;
                sum += N;
            }
        }
        average = (double)sum / count;
        cout << "Virknes nepāra skaitļu vidējā artimētiskā vērtība ir: " << average << endl;
        cout << " Vai turpināt (1) vai beigt (0)?" << endl;
        cin >> ok;
    } while (ok == 1);

    if (sum == 0) {
        cout << "Nevar aprēķināt nepāra skaitļu vidējo aritmētisko." << endl;
    }
    return (0);
}

该程序应询问键入链中有多少个数字,然后计算这些数字之间的奇数平均值。它正在工作,但是问题出在第二个循环中。在第二个循环中,算术平均值已经不正确,因为程序也包含了“第一圈”中的数字,但是我需要使它们独立。我应该怎么做才能使循环独立,这样我可以在不退出程序的情况下运行多个循环。

2 个答案:

答案 0 :(得分:0)

#include <iostream>

int main()
{
    double sum;
    for(;;)
    {
        int amount = 0;
        sum = 0;
        int a;

        std::cout << "Ievadiet, cik skaitļu būs virknē: " << std::endl;
        std::cin >> a;

        for (int i = 0; i < a; i++)
        {
            std::cout << "Ievadiet veselu skaitli: " << std::endl;
            int N;
            std::cin >> N;
            if (N % 2 == 1)
            {
                amount++;
                sum += N;
            }
        }
        double average = (double)sum / amount;
        std::cout << "Virknes nepāra skaitļu vidējā artimētiskā vērtība ir: " << average << std::endl;
        std::cout << " Vai turpināt (1) vai beigt (0)?" << std::endl;
        int ok;
        std::cin >> ok;

        if (ok != 1){
            break;
        }
    }

    if (sum == 0)
    {
        std::cout << "Nevar aprēķināt nepāra skaitļu vidējo aritmētisko." << std::endl;
    }

    return 0;
}

希望这行得通。

如果要这样做,请务必考虑变量的范围

int p = 0;
for (int i = 0; i < 100; i++){
    p++;
}
//here p would still be 100, because it was declared outside of the scope of the for loop

如果我要这样做。

for (int i = 0; i < 100; i++){
    int p = 0;
    p++;
    //would never get bigger then 1, because every iteration it gets reinstantiated.
}
//here p would be non-existent outside of the scope.

每次离开范围(几乎所有带有花括号的内容)时,该范围内的堆栈分配变量都将被删除。

堆分配的变量不会自动消失,必须显式删除它。

//heap allocated variable, recognised by the new keyword, which returns a pointer to your new variable.
int *numbers = new int[100];

//to delete it. If you don't do this you would get a memory leak.
delete numbers;

答案 1 :(得分:-1)

我相信我对您代码的修正会使事情顺利进行:

#include<iostream>

using namespace std;

int main()
{
    int a; //virknes skaitlis
    int N; //skaitlis
    int count = 0;
    int sum = 0;
    double average;
    int ok;

    do {
        count = 0;
        sum = 0;
        cout << endl << endl << "Ievadiet, cik skaitļu būs virknē: ";
        cin >> a;
        cout << endl;
        for (int i = 0; i < a; i++) {
            cout << "Ievadiet veselu skaitli: ";
            cin >> N;
            if (N % 2 == 1) {
                count++;
                sum += N;
            }
        }
        if (count != 0) { 
            average = (double)sum / count;
            cout << endl << "Virknes nepāra skaitļu vidējā artimētiskā vērtība ir: " << average << endl;
        } else { 
            cout << endl << "Nevar aprēķināt nepāra skaitļu vidējo aritmētisko.\nNetika ievadīti nepāra skaitļi." << endl;
        }
        cout << endl << "Vai turpināt (1) vai beigt (0)? :  ";
        cin >> ok;
    } while (ok == 1);

    cout << endl;

    return (0);
}