Хотя существует множество способов сделать это лучше, этот код позволяет мне объяснить, что происходит.Циклы Do-While определенно довольно сложны.Однако помните, что цикл do-while предназначен для запуска хотя бы один раз .
В нашем коде мы настроили операторы if
для проверки выполнения кода там, где он не подходит.
Посмотрите, как выглядит самый первый оператор if
N > 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;
}