コンピューター サイエンスの授業で、後置式の結果を計算するプログラムを開発しています。このプログラムは、スタック ADT を使用してこれを実現します。
プログラムを書きましたが、一部の式の結果が正しくないため、エラーが発生する可能性があると思います。私の間違いがどこにあるのかわかりません。
また、入力ファイルが空の場合、プログラムは 32767 という値を生成します。それはどこから来たのですか?
式: 3 4 + 3 * 値 = 21。
式: 5 4 3 2 1 - + / * 値 = 0. (5 である必要があります)
式: 9 5 2 4 + - 2 * * 値 = 18 (-18 のはず)
ヘッダー ファイル:
#ifndef STACK_H
#define STACK_H
#include <cstdlib>
#include <iostream>
class Stack
{
public:
typedef int Item;
static const int CAPACITY = 50;
// Constructor
Stack() { used = 0; }
// Modification Member Functions
void push(Item entry) {
data[used] = entry;
++used;
}
Item pop() {
if(!empty())
{
--used;
return data[used];
}
}
// Constant Member Functions
bool empty() const { return used == 0; }
int size() const { return used; }
private:
// Data Members
Item data[CAPACITY];
int used;
};
#endif
主なプログラム:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include "stack.h"
using namespace std;
int main()
{
Stack s;
string input;
ifstream infile;
int final, operand1, operand2, result;
char infile_name[80];
cout << "Enter input file name: ";
cin >> infile_name;
cout << endl;
infile.open(infile_name);
while(!infile)
{
cout << "Could not open file." << endl;
return 0;
}
while (!infile.eof())
{
getline(infile, input);
cout << "Expression: ";
for (int i = 0; i < input.length(); i++)
{
cout << input[i];
if(input[i] == '1' || input[i] == '2' || input[i] == '3' || input[i] == '4' || input[i] == '5' || input[i] == '6' || input[i] == '7' || input[i] == '8' || input[i] == '9')
s.push(input[i] - '0');
if(input[i] == '+')
s.push(s.pop() + s.pop());
if(input[i] == '-')
s.push(s.pop() - s.pop());
if(input[i] == '*')
s.push(s.pop() * s.pop());
if(input[i] == '/')
s.push(s.pop() / s.pop());
}
final = s.pop();
cout << endl << "Value = " << final << "." << endl << endl;
}
}