Перегрузка оператора проблема

Здравствуйте! Я пытаюсь создать программу, которая читает серию выражений инфикса из файла, пока не достигнет точки с запятой или точки (A + B.), А затем вывести постфикс выражения в другой файл. У меня проблемы с тем, чтобы мои перегруженные операторы работали правильно. Кто-нибудь может дать мне несколько советов о том, что с ними не так?

std::istream& operator>>(std::istream& in, expression& x) {
char y;
do {
in >> y;
x.ifix += y;
if (y == '.') {
x.last = true;
}
} while (y!= ';' || y!= '.');
x.convertToPostfix();

return in;
}

std::ostream& operator<<(std::ostream& out, const expression& x) {
out << x.pfix;

return out;
}

-4

Решение

Это выражение ВСЕГДА верно:

while (y != ';' || y != '.');

Если y является ';' , затем y не может быть '.'так что вторая половина верна. То же самое, но наоборот y является '.',

Ты хочешь

while (y != ';' && y != '.');

Или, если вы хотите выразить это больше как человек:

while (!(y == ';' || y == '.'));

Другими словами, «делайте вещи, пока y не равен точке с запятой или точке».

Это очень распространенная ошибка при объединении условий, и стоит потратить некоторое время на то, чтобы разобраться, чтобы вы могли заметить ее в будущем — потому что вы БУДЕТЕ совершить эту ошибку снова, я гарантирую это.

1

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

class expression
{
...
friend std::istream& operator>>(std::istream& in, expression& x);
friend std::ostream& operator<<(std::ostream& out, const expression& x);
};

std::istream& operator>>(std::istream& in, expression& x) {
char y;
do {
in >> y;
x.ifix += y;
if (y == '.') {
x.last = true;
}
} while (y!= ';' && y!= '.');            // you meant && here, right?
x.convertToPostfix();

return in;
}

std::ostream& operator<<(std::ostream& out, const expression& x) {
out << x.pfix;

return out;
}
0

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