cin в условии с объявлением переменой
новичок в c++. При чтении гугловского стайлгайда увидел объявление переменных в условиях:
while (const char* p = strchr(str, '/')) str = p + 1;
и теперь задаюсь вопросом как к такому виду можно привести такой код:
int a;
while (std::cin >> a) {
...
}
Первой мыслю было сделать что-то вроде такого, но оно не сработало:
while (std::cin >> int a) {
...
}
Ответы (2 шт):
В if можно так: if (int a; std::cin >> a).
В while это не работает (в условии там нельзя писать ;), поэтому скорее всего никак нельзя.
Можно использовать for, вот так: for (int a; std::cin >> a;)
С чистым std::cin вы вряд ли сможете сделать нечто подобное. Однако у вас всегда есть std::cin::get(), который возвращает один или несколько символов из потока ввода. И его можно использовать вот так:
while(char c = std::cin.get()) {
// Выведет посимвольно весь текст из потока ввода
std::cout << c << std::endl;
}
// Или так
char c;
while(std::cin.get(c)) {
// Выведет посимвольно весь текст из потока ввода
std::cout << c << std::endl;
}
Данный метод немного отличается от действия самого std::cin и его оператора >>, однако у него есть свои преимущества. Стоит помнить, что get() считывает лишь один символ, либо указанное в параметрах количество символов, а std::cin >> все, вплоть до первого пробела.
Важно:
Помните, что get возвращает код символа, который считал из потока ввода. Это означает, что если вы хотите считать int, то в int будут преобразовываться даже символы, согласно их кодам ASCII:
// При вводе Hello выведет:
//72 101 108 108 111 10
while(int i = std::cin.get()) {
std::cout << i << std::endl;
}
std::cin >> же от таких случаев застрахован посредством входа в состояние отказа. Подробнее можно почитать в документации на cppreference. Так что вам нужно выбирать тот способ, который вам подойдет лучше