Почему мой «пока» условие не выполняется?

Я запустил это и набрал «12+» в качестве выражения. Когда он попадает в цикл while, он застревает, как будто условие никогда не выполняется. Я не понимаю, почему это так, потому что прямо перед циклом while «it» равно 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; } //destructorvoid 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

Решение

Как вы упоминаете, ваш while пункт всегда true,

while (it != 1 || it != 2 || it != 3 || it != 4 || it != 5 || it != 6 || it != 7 || it != 8 || it != 9 || it != 0)

it будет всегда не быть некоторые из этих чисел.

Вы мог изменить каждый || в && в этом заявлении, так как это, вероятно, то, что вы имели в виду.
И изменить 1 в '1', 2 в '2', и так далее…

Более ясный подход был бы:

while ( !std::isdigit(it) )

http://en.cppreference.com/w/cpp/string/byte/isdigit

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]