Re: Can I get some help please "warning: multi-character character constant" and more
Mauricio wrote:
I'm having problem with my homework. I have to use if/else if and
switch. If I only use if the programs run, and I get some sort of
result incorrect but something. However if I used switch the program
ask for the input and return 0 without any result ?????
other thing that I am getting is "warning: multi-character character
constant"
In the future, try to strip your program down to the smallest program
that shows the error. And when you're posting a warning or error, tell
us what line(s) the error is on.
But I can see the problem without even putting your program into a
compiler. In fact, the warning was the biggest clue.
The short answer is: quit using apostrophes (the ' character) around
your numbers! For instance, change
if ((ticket == '1') && (age >= '16' || age <= '25')) {
to
if ((ticket == 1) && (age >= 16 || age <= 25)) {
Here's a more detailed explanation:
There are several different types of "literals" in C++.
3 -- is an "integer-literal" with the value 3. You
can use it in expressions such as
age = 3;
3.0 -- is a "floating-literal" with the value 3. You
can use it in expressions such as
result = 3.0;
"Three" -- is a "string-literal" with five characters plus
the terminating null character. You can use it
in expressions such as
std::cout << "Three" << std::endl;
(or, sinc you've use "using namespace std;" you
can just write)
cout << "Three" << endl;
'X' -- is a "character-literal" which is the letter X.
In some contexts you can use it as if it was an
integer with the same value as the character
code for an X (this is 88 in ASCII, other values
on non-ASCII systems).
On some computers, the data type that holds single characters is
actually able to hold more than one character at the same time,
but this is not portable. On those systems, you could write
'AB'
and your character-literal would contain both the letters A and B
(in that order). But this is still different than a string.
Now look at this statement from your program (this is just one
example -- you made this mistake in quite a few places):
if ((ticket == '1') && (age >= '16' || age <= '25')) {
The first part of this expression compares the value of integer
variable ticket to the character code for the digit 1. (This is
49, on ASCII systems -- your system might be different). If you
wanted to compare it to the INTEGER value 1, you should have
written
(ticket==1)
The rest of the expression has even bigger problems. We're comparing
the value of integer variable age to two different numbers -- but
what number is it comparing to? On the system I use, the value of
'16' is 12598 -- that works out to 49*256+54 (49 is the code for
'1' and 54 is the code for '6') and the value '25' is 12853 for
similar reasons.
Change this line to
if ((ticket == 1) && (age >= 16 || age <= 25)) {
and then it will work a LOT better... and the warning will be gone.
Your program still has a few other problems... but I'm sure you'll be
able to work those out on your own, once you have fixed the problem
with the apostrophes.
Good luck.
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]