C++ Do-while 循环没有像我预期的那样工作

C++ Do-while loop doesn't work as i expected

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);
}

这个程序应该要求输入链中有多少个数字,然后计算这些数字之间存在的奇数的算术平均值。它正在工作,但问题出在第二个循环中。在第二个循环中,算术平均值已经不正确,因为程序也包含来自第一个循环的数字,但我需要让它们独立。我应该怎么做才能使循环独立,这样我就可以 运行 多个循环而不退出程序。

我相信我对您的代码的修改会使事情变得顺利:

#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);
}
#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;