Как преобразовать цикл do while в цикл while в С++?

Я написал программу на C++, позволяющую пользователям вводить положительные числа с помощью цикла do while. Несмотря на это, когда я пытаюсь преобразовать цикл do while в цикл while, ожидаемый результат отличается от цикла while. Код выглядит следующим образом:

#include <iostream>
using namespace std;

int main()
{
    int n;

    do
    {
        cout << "Enter a non-negative integer: ";
        cin >> n;
        if (n < 0)
        {
            cout << "The integer you entered is negative. " << endl;
        }

    }
    while (n < 0);

    return 0;
}

Терминал требует от пользователя повторного ввода числа до тех пор, пока оно не будет положительным для приведенного выше кода, который я написал. Однако я пытаюсь преобразовать цикл do while в цикл while, как показано ниже, вывода нет вообще.

Могу ли я узнать, какую часть я написал неправильно? Спасибо.

#include <iostream>
using namespace std;

int main()
{
    int n;

    while (n < 0)
    {
        cout << "Enter a non-negative integer: ";
        cin >> n;
        if (n < 0){
            cout << "The integer you entered is negative. " << endl;
         }
    }

    return 0;
}

person Section 28    schedule 19.02.2021    source источник
comment
Просто присвойте любое отрицательное значение n перед циклом   -  person Martheen    schedule 19.02.2021
comment
Отвечает ли это на ваш вопрос? Эквивалентно использованию цикла for вместо цикла do-while-loop   -  person Ch3steR    schedule 19.02.2021
comment
@Ch3steR проблема в том, что результат отличается, так как я следовал инструкциям из Google и YouTube.   -  person Section 28    schedule 19.02.2021
comment
Во втором примере кода, поскольку n не инициализировано, оно может случайно содержать отрицательное число, а может и не содержать. Поведение, в частности, будет ли условие цикла while true при первом выполнении, не определено.   -  person Bungo    schedule 19.02.2021


Ответы (2)


В while версии вашего кода вы не знаете, что такое n, поскольку он не инициализирован до того, как вы используете его в while (n<0).

int main()
{
    int n;
    // HERE YOU DO NOT KNOW IF n is NEGATIVE OR POSITIVE, YOU EITHER NEED TO INITIALIZE IT OR
    // ENTER IT by cin >> n
    while (n < 0)
    {
        cout << "Enter a non-negative integer: ";
        cin >> n;
        if (n < 0){
            cout << "The integer you entered is negative. " << endl;
         }
    }

    return 0;
}

Затем вам нужно немного изменить порядок, чтобы получить тот же вывод, а также использовать первый ввод n, который находится вне цикла.

Например, это даст тот же результат:

#include <iostream>
using namespace std;

int main()
{
    int n=-1;
    cout << "Enter a non-negative integer: ";
    cin >> n;
    while (n < 0)
    {

        if (n < 0)
        {
            cout << "The integer you entered is negative. " << endl;
            cout << "Enter a non-negative integer: ";
            cin >> n;
        }
        else
        {
            // if positive you get out of the loop
            break;
        }
 
    }

    return 0;
}

person Pat. ANDRIA    schedule 19.02.2021
comment
Добро пожаловать. Я добавил попытку сделать тот же цикл с while. Конечно, это не единственное решение, но его легко понять. - person Pat. ANDRIA; 19.02.2021

Вы должны взять n перед оператором while(n‹0):

#include <iostream>
using namespace std;

int main()
{
    int n;
    cout << "Enter a non-negative integer: ";
    cin >> n;
    while (n < 0)
    {
        cout << "Enter a non-negative integer: ";
        cin >> n;
    if (n < 0)
            cout << "The integer you entered is "
                 << "negative. " << endl;
    }
    
    return 0;
}

Или вы можете инициализировать его отрицательным числом:

#include <iostream>
using namespace std;

int main()
{
    int n=-1;
    
    while (n < 0)
    {
        cout << "Enter a non-negative integer: ";
        cin >> n;
    if (n < 0)
            cout << "The integer you entered is "
                 << "negative. " << endl;
    }
    
    return 0;
}
person artunc    schedule 19.02.2021
comment
Я понимаю. Поэтому мне нужно дважды повторить операторы cout и cin, чтобы получить тот же результат, что и в цикле do while. Спасибо. - person Section 28; 19.02.2021