Использована неинициализированная переменная char. C++

#include <iostream>
using namespace std;

int main()
{
    while (char ch = cin.get() && ch != '=')
    {
       //что нибудь...
    }
}

При вводе любого символа - исключение об неинициализированности переменной ch. Почему здесь ловится исключение? ch вполне вроде инициализируется.


Ответы (3 шт):

Автор решения: icYFTL

Подозреваю char ch = cin.get() инициализируется только для первого условия. Грубо говоря, переменная, объявленная в условии будет доступна только для этого условия, но не более.

→ Ссылка
Автор решения: HolyBlackCat

Вот это:

while (char ch = cin.get() && ch != '=')

делает не то, что вы думаете. Это то же самое, что и:

while (char ch = (cin.get() && ch != '='))

Правильнее написать так:

while (char ch = cin.get(); ch && ch != '=')

Но я так понимаю, что в левой части && вы пытались проверить, что символ считался успешно, а не сравнить его с нулем. (.get() при ошибке возвращает не ноль.)

Тогда лучше написать так:

while (char ch = cin.get(); cin && ch != '=')
→ Ссылка
Автор решения: Harry

Я бы не заморачивался и использовал цикл for, в котором все совершенно очевидно и давно решено :)

for(char ch = cin.get(); ch != '='; ch = cin.get())

Впрочем, лучше так:

for(char ch; cin.get(ch) && ch != '=';)
→ Ссылка