Как получить целочисленный ввод от пользователя, пока ввод не встречается в C ++ - PullRequest
1 голос
/ 27 июня 2019

Я использую очередь с приоритетами из библиотеки C ++ STL и хочу продолжать помещать элементы в очередь, пока пользователь не нажмет Enter.

Я пытался использовать getchar (), чтобы получить входные данные элементов, но он был сохранен как серия из 1 в очереди.

priority_queue<int> v1;
priority_queue<int, vector<int>, greater<int> > v2;
cout<<"Enter the elements of the queue. Press enter to stop.\n";
while(a = getchar()!= '\n')
{
    v1.push(a);
    v2.push(a);
}
while(!v1.empty())
{
    cout<<v1.top()<<" ";
    v1.pop();
}

Я ожидал, что результат будетминимальная и максимальная куча введенных элементов, но все, что она мне дает, это серия 1-х

Ответы [ 2 ]

2 голосов
/ 27 июня 2019
while(a = getchar()!= '\n')

это серия из 1 предупреждений

с приоритетом операторов, вы хотите

while((a = getchar())!= '\n')

в настоящее время вам нравится

while(a = (getchar()!= '\n'))

, пока входной символ не переводится на новую строку, тест верен, поэтому a установлен на 1


Учитывая ваше замечание ниже, вы хотите прочитать строки, а затемостановка, если эта строка пуста или содержит только новую строку или может также быть, если строка не содержит литерал int , иначе для извлечения от int до push it

Например:

#include <iostream>
#include <queue>
#include <string>
#include <sstream>

using namespace std;

int main()
{
  priority_queue<int> v1;
  priority_queue<int, vector<int>, greater<int> > v2;
  cout<<"Enter the elements of the queue. Press enter to stop.\n";

  int a;
  string s;

  while (getline(cin, s) && (istringstream(s) >> a))
  {
    v1.push(a);
    v2.push(a);
  }
  while(!v1.empty())
  {
    cout<<v1.top()<<" ";
    v1.pop();
  }
  cout << endl;
}

Компиляция и выполнение:

pi@raspberrypi:/tmp $ g++ -pedantic -Wall -Wextra c.cc
pi@raspberrypi:/tmp $ ./a.out
Enter the elements of the queue. Press enter to stop.
12
32

32 12 
pi@raspberrypi:/tmp $ 
0 голосов
/ 27 июня 2019

Да, потому что a = getchar()!= '\n' оценивается как a = (getchar() != '\n') дает вам значение bool, истинное в данном случае, до тех пор, пока вы не нажмете ввод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...