Ask your own question, for FREE!
Computer Science 21 Online
OpenStudy (anonymous):

In c++ lets say i have a variable char lets call it char variable; and i want to test it if it is any of these 'a', 'b', or 'c' after the user inputs a char will the below snip of code work as a shorcut if(variable== 'a'|| 'b' || 'c') cout << "your variable is one of those"; or do i have to do it the long way like below if(variable== 'a'|| variable =='b' || variable== 'c') cout << "your variable is one of those";

OpenStudy (anonymous):

Or lets say i made this function that takes char c and returns true if it is a number 0-9. Do I absolutely have to write it like that? all of it on the if statement? bool boolisnum( char c) { if (c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') return true; else return false; }; can if (c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') be reduced to if (c=='0'|| '1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9')

OpenStudy (hba):

Use switch case.

OpenStudy (bibby):

char c = 'a'; if (c=='0'|| '1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9') cout << "test"; that code segment still outputs "test" no matter what value c is. I think the reasoning behind this is that you can think of characters as integers. if(CONSTANT) executes the conditional as long as the number doesn't evaluate to 0 (false). if('6') is the same thing as saying if(54). Look at the ascii table: http://www.asciitable.com/ bool b = true; if(1) and if(54) and if(-1) and if(b) all execute the conditional. Use a switch or the conditional operator. Either way, write it out.

OpenStudy (anonymous):

I know for sure works. bool boolisnum( char c) { if (c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9') return true; else return false; }; if i where to type in main boolisnum('4'); it will evaluate to true Note that idk what boolisnum(4); would do. It probably would not compile since 4 is of type int not char. I am just looking to make my code shorter by not putting all those c==' 's. oh and if boolisnum('b'); it evaluates as false.

OpenStudy (bibby):

#include <cctype> isdigit() http://www.cplusplus.com/reference/cctype/isdigit/

OpenStudy (bibby):

or, switch(c){ case '1': case '2': ... case '0': etc. break; }

OpenStudy (anonymous):

switch makes it longer. The whole point is to make my code shorter. Oh and os is messing up.

OpenStudy (bibby):

I literally just gave you a single function. It doesn't get shorter than that

OpenStudy (bibby):

bool boolisnum( char c){ if (isdigit(c)) return true; return false; }

OpenStudy (anonymous):

yes thank you that does work now i wanna know is if (c=='0'|| '1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9') same as if (c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9')

OpenStudy (bibby):

I explained it in my first post. It isn't the same thing

OpenStudy (bibby):

It'll always evaluate to true no matter what

OpenStudy (anonymous):

darn so i do gotta use c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9'

OpenStudy (bibby):

You don't gotta use anything when there's a function written for you. If you refuse to use perfectly find functions, yeah, you have to do that...

OpenStudy (anonymous):

I am just saying as an example. I know there is one that checks for if its upper of lower case. BUt There wont be one for every single one of my needs :).

OpenStudy (bibby):

lol the STL is pretty comprehensive check http://www.cplusplus.com/reference/cctype/ for more. Read about how chars/ascii work in relation to integers. remember if(some constant that isn't 0) always evaluates to true

OpenStudy (anonymous):

it is a huge library. And sometimes it be quicker making my function instead of looking for it :P

OpenStudy (anonymous):

and it's a great learning experience :D

OpenStudy (turingtest):

to reiterate why if (c=='0'|| '1'||'2'||'3'||'4'||'5'||'6'||'7'||'8'||'9') will always evaluate to "true", is because c++ interprets zero as false, and all non-zero values as true. No char has an ascii value of zero, as binary zero in ascii is the NUL value. For instance if (false || 1) will always evaluate to "true", since the second statement, 1, counts as true. equally it could be any non-zero number. if (false || -534.7) will also evaluate to "true" As far as the compiler is concerned, this is the same as if (false || true) only something like if (false || 0) will evaluate to "false", since zero counts as false. Since the char '0' has an ascii value of 48 in decimal, the statement if (false || '0') is equivalent to if (false || 48) which, as I explained above, is equivalent to if (false || true) which will, of course, evaluate to "true"

OpenStudy (anonymous):

'a'=='d' will evaluate as false 'a'=='a' will evaluate as true i know that much.

OpenStudy (bibby):

there's no equivalence being done here. The characters are getting interpreted by their INTEGER ascii values. if('a') is the same thing as if(65) or whatever

OpenStudy (anonymous):

idk what it does but those statements will work i have compiled them and it does work.

OpenStudy (bibby):

use full sentences because I don't understand you. if(c=='0'||'1'...) will not work...

OpenStudy (anonymous):

Okay, ASCII was ordered the way it was for a reason. ``` # is digit if '0' <= variable <= '9': # is a,b, or c if 'a' <= variable <= 'c': ``` Look at the chart.

OpenStudy (anonymous):

I suppose since this is C++ you should be using `if (` ... `) {` ... `}` instead, but the point still stands.

OpenStudy (anonymous):

Why reinvent the wheel? Regex is a great way to check input against a pattern in any language. http://www.cplusplus.com/reference/regex/regex_search/

Can't find your answer? Make a FREE account and ask your own questions, OR help others and earn volunteer hours!

Join our real-time social learning platform and learn together with your friends!
Can't find your answer? Make a FREE account and ask your own questions, OR help others and earn volunteer hours!

Join our real-time social learning platform and learn together with your friends!