I have such a program:
#include <stdlib.h>
#include <iostream>
static int pswd=0;
int main() {
do {
std::cout<<"I need your password:"<<std::endl;
std::cin>>pswd;
} while (pswd!=3855);
std::cout<<"Congratulations! Your password is correct! Your soul is free again!"<<std::endl;
}
And I have, may be, a stupid question. When I enter invalid values (with non-numerical symbols or values greater then int) program goes in endless loop without reading of any information from console.
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
I need your password:
...
Why does this program go in endless loop?
Because after invalid input, the stream is in failed state and all further input operations are no-op. You always have to check the result of the input operation.
do {
std::cout<<"I need your password:"<<std::endl;
if (!(std::cin >> pswd)) {
// clear error flags
std::cin.clear();
// discard erroneous input (include <limits>)
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
} while (pswd!=3855);
It is trying to read an int
but it can take a peek into the buffer from STDIN. It notices that you have not got an int
so the cin>>
fails. (See fail bit).
So it just goes around again. You need to check for failed type conversion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With