0
 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或句点('。')我想输入一个双精度,并且如果用户输入一个运算符(+,- , ^, /, *) 然后输入一个字符。但是,我无法弄清楚如何正确使用 cin.peek() ,如果有人能指出我正确的方向,将不胜感激。输入的示例类似于 10 20 40++(数字和运算符之间没有空格,并且运算符和运算符是可接受的),然后用户按 ctrl+d 结束输入。

4

1 回答 1

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,则根据返回值检查结果c

于 2013-10-11T22:51:51.183 回答