Цикл while для приема пользовательского ввода не принимает последнее введенное значение

#c #input #while-loop

#c #ввод #цикл while

Вопрос:

Я совсем новичок в кодировании, поэтому я не совсем понимаю, почему этот цикл while не принимает последнее введенное значение. Вывод в конце, если вы должны были ввести «1, 2, 3, 4, 5» было бы «4, 3, 2, 1». Любая помощь будет высоко оценена.

 #include <iostream>
#include <cstdlib>
#include <queue>
#include <vector>

using namespace std;

int main()
{
    priority_queue<int> q;

    int score;

    cin >> score;

    int count = 0;

    while (count != 4)
    {
        count  ;
        q.push(score);
        cin >> score;
    }

    while (!q.empty())
    {
        cout << q.top() << " ";
        q.pop();
    }
}
 

Комментарии:

1. Вы никогда q.push(score); не после последнего cin >> score; . Попробуйте пошагово выполнить свой код с помощью отладчика, чтобы посмотреть, что произойдет q .

2. Ваша структура немного странная. Просто переместите cin перед push , удалите cin вне цикла и остановите цикл, когда count будет 5.

3. Спасибо за вашу помощь. Я совершенно забыл, что у меня был другой ввод над циклом while.

4. Разговор с уткой в порядке вещей… Посмотрите, как отлаживать небольшие программы , не смейтесь, это работает…

Ответ №1:

Это потому, что вы никогда не делаете q.push(score); после последнего cin >> score; в вашем первом while цикле. Это означает, что очередь сохраняет только 4 целых числа, что приводит к следующему циклу while для печати только четырех чисел. Приведенный ниже код выведет вам пять чисел.

 #include <iostream>
#include <queue>

using namespace std;

int main()
{
    priority_queue<int> q;

    int score;

    int count = 0;

    while (count != 5)
    {
        cin >> score;
        q.push(score);
        count  ;
    }

    while (!q.empty())
    {
        cout << q.top() << " ";
        q.pop();
    }
}
 

Ответ №2:

 #include <iostream>
using namespace std;

int arr[5], n = 5;

int main() {
    for (int i = 0; i < 5; i  )
        cin >> arr[i];
    for (int i = 0; i < 5; i  ) {
        n--;
        cout << arr[n] << endl;
    }
}