Я пытался написать программу, которая запрашивает ввод массива char, используя cin.getline()
, и если заданный ввод больше, чем длина массива, массив расширяется.
Я использовал cin.failbit
, чтобы увидеть, был ли ввод пользователя слишком длинным. Но ничего не получилось. Поэтому после отладки я понял, что проблема заключается в failbit
.
Итак, я написал простую программу, чтобы увидеть, что с ней не так, и оказалось, что каким-то образом cin.failbit
всегда возвращает true, если в операторе if даже когда ввод кажется действительным .
int main () {
char name[256];
std::cout << "Enter your name: ";
std::cin.getline (name,256, '\n');
std::cout << "characters read: " << std::cin.gcount() << std::endl;
if (std::cin.failbit){
std::cin.clear();
std::cout << "failed\n";
}
}
Например, когда input является "qwer", программа выводит, что 5 символов были прочитаны (cin.gcount
), поэтому все должно быть в порядке, но также выводит "fail", что означает, что установлен флаг failbit. Но я считаю, что это не должно быть в этом случае.
здесь вывод программы
Так может ли кто-нибудь объяснить, почему failbit
кажется установленным постоянно?
Любая помощь будет высоко ценится