我正在使用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
答案 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键为止。