C ++: повторение цикла do while - PullRequest
       1

C ++: повторение цикла do while

0 голосов
/ 13 сентября 2018

Мне очень жаль вопроса о супер-новичке, но я не могу понять всю жизнь, как заставить цикл повторяться.Я изменил цикл while в цикл do while, и теперь я не знаю, как заставить его спросить: «Хотите ли вы повторить Y или N?»любое объяснение?

Я читал различные посты, в которых выполняется цикл do while, но они не имеют смысла для меня.По сути, я собираюсь обернуть этот код в другой цикл do while?Должен ли я переместить логическое выражение в какое-то время раньше?

#include <iostream>
using namespace std;
int main(void)
{
    int x;
    int count = 0;
    int N;
    double sum = 0; 
    double average;
    char ans;

    {
        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
        cin >> N;
        do
        {
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++; // 
        } while (count < N);

        if (N == 0)
            cout << "You have entered 0 numbers. No average will be computed. Bye! \n";
        else {
            average = average = sum / N;
            cout << "The average of these " << N << " grades is " << average << endl;
        }

         cout << "Would you like to enter more values to calculate your grade average?\n";

        system("pause");
        return 0;
    }
}

Ответы [ 3 ]

0 голосов
/ 13 сентября 2018

может сделать это:

 char repeat='y'; 
 cout << "Enter number of values, N, to be read in <Enter>:" << endl;
 cin >> N;

 do
    {
        for(int i=0;i<n;i++){
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++; // 
        }

    if (N == 0)
        cout << "You have entered 0 numbers. No average will be computed. Bye! \n";
    else {
        average = average = sum / N;
        cout << "The average of these " << N << " grades is " << average << endl;
    }

     cout << "Would you like to enter more values to calculate your grade average?\n";
     cin>>repeat;

 }while(repeat=='y');
0 голосов
/ 13 сентября 2018

Хотя существует множество способов сделать это лучше, этот код позволяет мне объяснить, что происходит.Циклы Do-While определенно довольно сложны.Однако помните, что цикл do-while предназначен для запуска хотя бы один раз .

В нашем коде мы настроили операторы if для проверки выполнения кода там, где он не подходит.

Посмотрите, как выглядит самый первый оператор ifN > 0, оператор if выполняется, пожалуйста, не забудьте об этом.Еще раз для акцента: оператор if ДЕЙСТВИТЕЛЬНО выполняется, это просто приводит к ложному.

С этим, как говорится, вы используете цикл do-while, когдаВы хотите, чтобы ваш блок кода выполнялся по крайней мере один раз.Обратите внимание, что в нашем операторе while есть две вещи, которые мы проверяем, во-первых, является ли ответ 'Y' от пользователя на продолжение, и если да, является ли вновь введенное значение N больше 0?

Вам может быть интересно, если самый внутренний оператор if когда-либо выполняется хотя бы один раз, хорошо, ответ - это зависит от предыдущего, если оператор if if(N > 0) и if(count == N && N != 0) оба выполняются один раз каждый раз, когда while цикл остается верным.Тем не менее, вложенность if зависит от родительского результата.

Надеюсь, это прояснило некоторые вещи для циклов do-while.

#include <iostream>
using namespace std;
int main(void)
{
    int x;
    int count = 0;
    int N;
    double sum = 0;
    double average;
    char ans = 'Y';

        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
        cin >> N;

        do
        {
            if(N > 0){ //THIS IF STATEMENT WILL ALWAYS RUN AT LEAST ONCE
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++;
            }

            if(count == N && N != 0) {//THIS IF STATEMENT WILL ALSO ALWAYS RUN AT LEAST ONCE
                average = average = sum / N;
                cout << "The average of these " << N << " grades is " << average << endl;
                cout << "Would you like to enter more values to calculate your grade average?\n";
                    cin>>ans;
                    if(ans == 'Y') {//This one depends on it's parents result.
                        x = 0;
                        N = 0;
                        sum = 0;
                        count = 0;
                        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
                        cin >> N;
                    }
            }

        } while (ans == 'Y' && N != 0);

        if (N == 0)
            cout << "You have entered 0 numbers. No average will be computed. Bye! \n";

        system("pause");
        return 0;
}
0 голосов
/ 13 сентября 2018

Может быть, это то, что вам нужно, с char YorN, который вы рассматриваете, продолжить или сломать внутренний do-while.

#include <iostream>
using namespace std;
int main(void)
{
    int x;
    int count = 0;
    int N;
    double sum = 0; 
    double average;
    char ans;
    char YorN;

    do{
        cout << "Enter number of values, N, to be read in <Enter>:" << endl;
        cin >> N;
        do
        {
            cout << "\n Enter a grade <Enter>: ";
            cin >> x;
            sum = sum + x;
            count++; // 
        } while (count < N);

        if (N == 0)
            cout << "You have entered 0 numbers. No average will be computed. Bye! \n";
        else {
            average = average = sum / N;
            cout << "The average of these " << N << " grades is " << average << endl;
        }

        cout << "Would you like to enter more values to calculate your grade average?\n";
        cin>>YorN;

    } while (YorN=='Y');
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...