好吧所以最终我将制作一个带有堆栈实现的后缀计算器,并获得45 20+等输入。我只是在输入正确方面遇到麻烦,我想忽略空格,如果用户输入一个数字,我想要一个双重,如果用户输入一个运算符,比如+,我想输入一个字符。我到目前为止的内容如下:
1 #include"dstack.h"
2
3 #include<iostream>
4 #include<stdlib.h>
5 using namespace std;
6
7 void error();
8
9 int main()
10 {
11 char value = cin.peek();
12 char op;
13 double num;
14
15 while(!cin.eof())
16 {
17 if( (isdigit(value)) ) //|| value == '.') )
18 {
19 cin >> num;
20 cout << "Your number is: " << num << endl;
21 }
22
23 else if( (isspace(value)) )
24 {
25 cin.ignore();
26 }
27
28 else if ( (value = '+') )
29 {
30 cin >> op;
31 cout << "You entered a char: " << op << endl;
32 }
33
34 else if ( (isalpha(value)) )
35 {
36 error();
37 }
38 }
39 cout << "No more input" << endl;
40 }
41
42 void error()
43 {
44 cerr << "error" << endl;
45 exit(1);
46 }
由于我只是测试,我没有把任何东西放在堆栈或任何类似的东西,并且还有更多的运算符,我只是测试'+'以使其工作。发生的事情是,如果我输入一个数字,它工作正常,但是说我输入30,按回车键,然后输入+,然后输入,它循环我的cout数字声明一百万次。我的程序是否卡在每个if语句中?任何帮助将不胜感激,如果需要任何澄清或其他信息,请问。数字之间需要有空格,需要忽略空格,并且不需要运算符之间的空格。最终,应该发生的是用户输入的内容,如30 30 30 ++,并评估该等式。
答案 0 :(得分:0)
else if ( (value = '+') )
应该是
else if (value == '+')
使用==
进行比较。
答案 1 :(得分:0)
我想通了,我搞砸了并设置了char值= cin.peek(),并且应该在函数中使用cin.peek(),花费在简单错误上的时间:D。