Click here to Skip to main content
15,121,414 members
Please Sign up or sign in to vote.
3.00/5 (2 votes)
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

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
Comments
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
   
Please do vote and accept the answers which helped!
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
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
Comments
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.

I did -- please see.
--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
   
Thanks Sandeep Mewara, analyzing now your links.
Tarun.K.S 31-Mar-11 14:45pm
   
Please do vote and accept the answers which helped!
Tarun.K.S 31-Mar-11 14:40pm
   
Here comes a 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
   
A similar question had come up before, see this...

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

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)




CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900