2013-10-11 51 views
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或句点('。')我想输入一个double,并且如果用户输入一个运算符(+, - ,^,/,*)然后输入一个字符。但是,我无法弄清楚如何正确使用cin.peek(),如果任何人都可以指出我正确的方向,将不胜感激。一个输入的例子就像10 20 40 ++(数字和运算符之间没有空格,操作符和运算符可以接受),然后用户按下ctrl + d结束输入。问题使用cin.peek()和检测输入与cin.peek()

回答

0

那么,in.peek()将读取当前字符或返回std::char_traits<char>::eof()如果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中之后达到EOF。