Использована неинициализированная переменная char. C++
#include <iostream>
using namespace std;
int main()
{
while (char ch = cin.get() && ch != '=')
{
//что нибудь...
}
}
При вводе любого символа - исключение об неинициализированности переменной ch. Почему здесь ловится исключение? ch вполне вроде инициализируется.
Ответы (3 шт):
Подозреваю char ch = cin.get() инициализируется только для первого условия. Грубо говоря, переменная, объявленная в условии будет доступна только для этого условия, но не более.
Вот это:
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 != '=')
Я бы не заморачивался и использовал цикл for, в котором все совершенно очевидно и давно решено :)
for(char ch = cin.get(); ch != '='; ch = cin.get())
Впрочем, лучше так:
for(char ch; cin.get(ch) && ch != '=';)