my program prompt an integer input but if the user type in a character the program crash!
is there any solution to the problem
MANY THANX
my program prompt an integer input but if the user type in a character the program crash!
is there any solution to the problem
MANY THANX
Jump to PostIf cin fails to read the type it expects, it will enter an error state and won't accept further input. Try this:
while (n<1||n>10) { cout << "\nInvalid input. Try again (1..10) -> "; cin.clear(); cin >> n; cin.ignore(SHRT_MAX, '\n'); }
Also, you need to initialize n …
Jump to PostAs long as it's something outside of your valid range, it doesn't matter what value you choose.
Jump to Post>I didn't work!!!
Not helpful. Post the code that doesn't work and explain how it doesn't do what you want.
You're gonna have to give us a bit more than that - how about some source code?
hi,
this sounds like buffer overflow :)
as winbatch said 'give us your source code'.
fgets() to read a line of input.
strtol() to validate, convert and check for numeric overflow.
Both provide some success/fail indication in their status returns.
Absolutely right! Here the source code:
#include <iostream.h>
#include <limits.h>
main()
{
int n; /* number of values entered */
cout << "How many values? (1..10) -> ";
cin >> n;
cin.ignore(SHRT_MAX, '\n');
/* control number of value entered by the user */
while (n<1||n>10)
{
cout << "\nInvalid input. Try again (1..10) -> ";
cin >> n;
cin.ignore(SHRT_MAX, '\n');
}
}
Thus so far I have got the input will be within the range 1 to 10 and if the user will type in any value with a fraction part the program cut it off.
But if the user type in a letter the program crash!!!
If cin fails to read the type it expects, it will enter an error state and won't accept further input. Try this:
while (n<1||n>10)
{
cout << "\nInvalid input. Try again (1..10) -> ";
cin.clear();
cin >> n;
cin.ignore(SHRT_MAX, '\n');
}
Also, you need to initialize n to something. If the first input fails, n will remain indeterminate, and that could cause a number of problems.
So if let's say I initialize n to 0 or 11. Will that be ok?
As long as it's something outside of your valid range, it doesn't matter what value you choose.
:eek: I didn't work!!!
>I didn't work!!!
Not helpful. Post the code that doesn't work and explain how it doesn't do what you want.
That's what I have done:
#include <iostream.h>
#include <limits.h>
main()
{
int n; /* number of values entered */
n=0;
cout << "How many values? (1..10) -> ";
cin.clear();
cin >> n;
cin.ignore(SHRT_MAX, '\n');
/* control number of value entered by the user */
while (n<1||n>10)
{
cout << "\nInvalid input. Try again (1..10) -> ";
cin.clear();
cin >> n;
cin.ignore(SHRT_MAX, '\n');
}
:rolleyes: I thought I had duplicate cin.clear();
as the program could ever get a valid input and thus it will not execute the while
Hope this is more helpful!
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.