1 #include<iostream>
2 using namespace std;
3
4 #include"dstack.h"
5
6 int main()
7 {
8 char value = cin.peek();
9 char op;
10 double num;
11
12 while(value != cin.eof())
13 {
14 if( (isdigit(value) || value == '.') )
15 {
16 cout << "you entered a digit!" << endl;
17 cin >> num;
18 }
19
20 else if( (isspace(value)) )
21 {
22 cout << "white space" << endl;
23 cin.ignore();
24 }
25
26 else if( (!isdigit(value)) )
27 {
28 cout << "You entered a character" << endl; // I want this to catch operators
29 cin >> op;
30 }
31 }
32 cout << "No more input" << endl;
33 }
好吧基本上我试图做的是创建一个后缀计算器并实现一个堆栈。我可以解决这个问题,但我只是试图获得这个程序的基本输入,并且我不熟悉cin.peek()。我想要做的是用cin.ignore()忽略空格,如果用户输入数字0-9或句点('。')我想输入一个double,如果用户输入一个运算符(+, - ) ,^,/,*)然后输入一个字符。但是,我无法弄清楚如何正确使用cin.peek(),如果有人能指出我正确的方向,我将不胜感激。一个输入的例子就像10 20 40 ++(数字和运算符之间没有空格,运算符和运算符都可以接受),然后用户按ctrl + d结束输入。
答案 0 :(得分:0)
好吧,如果达到EOF,in.peek()
会读取当前字符或返回std::char_traits<char>::eof()
。表达式in.eof()
产生一个布尔标志,指示流是否在某个时刻达到了EOF。也就是说,循环条件可能看起来像这样:
for (int c; (c = (std::cin >> std::ws).peek()) != std::char_traits<char>::eof(); ) {
if (std::isdigit(c) || '.') {
...
}
...
}
读取下一个字符的表达式以跳过空格开始(如果您不喜欢,则删除>> std::ws
)并在将EOF存入变量{{}后将结果与值返回检查结果{{ 1}}。