在C ++

时间:2019-06-27 13:28:38

标签: c++ stl

我正在使用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's

2 个答案:

答案 0 :(得分:2)

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

它给了我一系列的1

根据需要优先考虑操作员

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

当前您喜欢

#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;
}

当输入的char不是换行符时,测试为true,因此 a 设置为1


考虑到您在下面的评论,您想读取行,然后在该行为空或仅包含换行符时停止,或者如果该行不包含文字 int 则停止,否则提取< em> int 来

例如:

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 $ 

编译和执行:

{{1}}

答案 1 :(得分:0)

是的,因为对a = getchar()!= '\n'的求值为a = (getchar() != '\n')会给您一个布尔值,在这种情况下为true,直到您按Enter键为止。