15,121,230 members
See more:
Hello everyone!
Why when i enter an integer it's work perfect(code below), but when i enter a char type simbol it's going crazy and loop run a single line forever? I understand that is a problem with the diferent variable types and compiler do not understand simply what need to enter.
How to define variable, that if you enter a char type, it converts to number and do normaly loop by condition or maybe how to define, that you could enter only a number?

do
{
int x;
std::cout << "Enter number: ";
std::cin >> x;

if (x == 1)
std::cout "...";
else if (x == 2)
std::cout "...";
else if (x == 3)
std::cout "...";
else
std::cout "...";}
while (x < 1 || x > 3);
{
x++;
}

Any ideas or offers? :)
Posted

## Solution 2

The problem with loop is way too simple.

The problem is the condition and its OR operator (||) you use, Actually your define the union of sets {x < 1} and {x > 3}, which is the set outside of the segment [1, 3]. Should initial value be 3 or more, it will grow infinitely.

Did you really mean AND (&&) operator?

—SA
v3
Sandeep Mewara 31-Mar-11 14:34pm

5 for the explanation of infinite loop :)
Sergey Alexandrovich Kryukov 31-Mar-11 14:54pm

Thank you, Sandeep.
--SA
Tarun.K.S 31-Mar-11 14:40pm

And a 5 here too! :D
Its been a long time SA, how are you doing sir?
Sergey Alexandrovich Kryukov 31-Mar-11 14:52pm

Thank you, Tarun.
Different...
--SA
Tarun.K.S 31-Mar-11 14:58pm

Ok.
Tarun.K.S 31-Mar-11 14:45pm

Sergey Alexandrovich Kryukov 31-Mar-11 14:53pm

Yes, I expect you accept this answer.
What condition to use depends not on my advice but on your need.
All you trying to to is to assign x to something. What is should be after the loop?
(Maybe you need just one assignment.) :-)
--SA

## Solution 1

Possible - using stringstream

Here: Using cin to get user input.[^]
This shows the way to convert the char to integer (a valid value if pssible.)

More details here:Basic Input/Output[^]

UPDATE:
Just came across this too (a good alternative): use std::cin.good() - It is 0 if the input is invalid.
v2
Sergey Alexandrovich Kryukov 31-Mar-11 14:27pm

My 5 but... You did not answer the trivial question about the inf. loop, which is asked in the title.

--SA
Tarun.K.S 31-Mar-11 14:39pm

Lol teamwork?!
Sergey Alexandrovich Kryukov 31-Mar-11 14:59pm

A hell of teamwork indeed, of the LOL, too :-)
--SA
Sandeep Mewara 31-Mar-11 14:55pm

Thanks to you too. :)
Sandeep Mewara 31-Mar-11 15:05pm

Great! Good to know.
MNMR 31-Mar-11 14:28pm

Tarun.K.S 31-Mar-11 14:45pm

Tarun.K.S 31-Mar-11 14:40pm

Here comes a 5!

## Solution 5

The problem has been solved. I used string stream.
...
...
do
{
int x;
string xstr;
std::cout << "Enter number: ";
std::getline(std::cin, xstr);
std::stringstream(xstr) >> x;
if (x == 1)
std::cout "...";
else if (x == 2)
std::cout "...";
else if (x == 3)
std::cout "...";
else
std::cout "...";}
while (x < 1 || x > 3);
{
x++;
}

And it works now good even you enter a char type. And need don't forget includes...:D

## Solution 4

A similar question had come up before, see this...

why program crashes when user gives char to a integer?[^]