Почему код пропускает cin?

Я не понимаю, как работает ввод булевых значений? Почему этот код пропускает cin<<a, не дав ввести переменную и устанавливает ей значение 0

#include <iostream>

using namespace std;

int main() {
    bool a;
    cin >> a;
    cout<<a;
}

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

Автор решения: Stanislav Volodarskiy

Потому что ввод проверять нужно и потому что булевы значения вводятся как 0 и 1:

#include <iostream>

using namespace std;

int main() {
    bool a;
    if (!(cin >> a)) {
        cerr << "Error\n";
        return 1;
    }
    cout << a << '\n';
}
$ g++ temp.cpp 

$ echo true | ./a.out
Error

$ echo 1 | ./a.out
1

Если хотите вводить булевы значения как false или true используйте boolalpha:

#include <iostream>

using namespace std;

int main() {
    bool a;
    if (!(cin >> boolalpha >> a)) {
        cerr << "Error\n";
        return 1;
    }
    cout << a << '\n';
}
$ g++ temp.cpp 

$ echo 1 | ./a.out
Error

$ echo true | ./a.out
1
→ Ссылка