Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
576 views
in Technique[技术] by (71.8m points)

c++ - Avoiding infinite loop when a char is enter in place of int

I'm doing a Banking System project and need to make sure that every input is valid(program has to be robust). If invalid input is given then user has to enter again.
But when i have a variable of int type and user enters char type an infinite loop begins.
For example:

int i;
cin>>i;

If user enters a char infinite loop starts. How can i avoid it and ask user for an input again?
Thanks

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Reason for Infinite loop:

cin goes into a failed state and that makes it ignore further calls to it, till the error flag and buffer are reset.

cin.clear();
cin.ignore(100, '
'); //100 --> asks cin to discard 100 characters from the input stream.

Check if input is numeric:

In your code, even a non-int type gets cast to int anyway. There is no way to check if input is numeric, without taking input into a char array, and calling the isdigit() function on each digit.

The function isdigit() can be used to tell digits and alphabets apart. This function is present in the header.

An is_int() function would look like this.

for(int i=0; char[i]!='';i++){
   if(!isdigit(str[i]))
      return false;
}
return true;

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...