Я запускаю это и набираю «12+» в качестве выражения. Когда он добирается до цикла while, он застревает, как будто условие никогда не выполняется. Я не понимаю, почему это происходит потому, что перед циклом while «он» равен 2, поэтому цикл не должен использоваться.Почему мое условие «пока» не выполняется?
//array based stack implementation
class Stack
{
private:
int capacity; //max size of stack
int top; //index for top element
char *listArray; //array holding stack elements
public:
Stack (int size = 50){ //constructor
capacity = size;
top = 0;
listArray = new char[size];
}
~Stack() { delete [] listArray; } //destructor
void push(char it) { //Put "it" on stack
listArray[top++] = it;
}
char pop() { //pop top element
return listArray [--top];
}
char& topValue() const { //return top element
return listArray[top-1];
}
char& nextValue() const {//return second to top element
return listArray[top-2];
}
int length() const { return top; } //return length
};
int main()
{
string exp;
char it = ' ';
int count;
int push_length;
cout << "Enter an expression in postfix notation:\n";
cin >> exp;
cout << "The number of characters in your expression is " << exp.length() << ".\n";
Stack STK;
for(count= 0; count < exp.length() ;count++)
{
if (exp[count] == '+')
{
it = exp[count - 1];
cout << it << "\n";
while (it != 1 || it != 2 || it != 3 || it != 4 || it != 5 || it != 6 || it != 7 || it != 8 || it != 9 || it != 0)
{
cout << it << "\n";
it = exp[count--];
}
STK.push(it);
//cout << STK.topValue() << "\n";
it = exp[count --];
if (it == 1 || it == 2 || it == 3 || it == 4 || it == 5 || it == 6 || it == 7 || it == 8 || it == 9 || it == 0){
STK.push(it);
cout << it;
}
cout << STK.topValue() << "\n";
it = STK.topValue() + STK.nextValue();
STK.pop();
STK.pop();
STK.push(it);
cout << STK.topValue() << "\n";
}
}
cout << "The number of characters pushed into the stack is " << STK.length() << ".\n";
push_length = STK.length();
return(0);
}
Вы сравниваете от значения полукокса 1, который не является так же как значение char '1'. – Joe
Проблема с циклом, который работает на неопределенный срок или не выполняется в ожидании, - прекрасное время, чтобы научиться использовать отладчик. Найдите, как использовать отладчик с любым компилятором и идеей, который вы используете. По сути, это позволит вам запустить программу, а затем приостановить ее прямо перед циклом и проверить все значения переменных. Вы можете даже наблюдать определенные переменные и выражения. т. е. вы могли бы узнать, является ли это! = 1 истинным или ложным в любой момент во время выполнения. Я начал использовать отладчик после программирования в течение длительного времени, хотелось бы, чтобы я узнал ранее. – Joshua
Я вернул свой вопрос. С вашим редактированием вопрос не имеет смысла. Если у вас есть дополнительные вопросы о фиксированном коде, пожалуйста, откройте новый вопрос. – avakar