By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,657 Members | 1,029 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,657 IT Pros & Developers. It's quick & easy.

Wierd output instead of 0s and 1s

P: n/a
A practice excercise from K&R. Kindly read the comments within the
program. I'd be very grateful to people who helped. Why is it that I
get the wierd face-like characters on the screen instead of the
boolean output 0s or 1s?

#include <stdio.h>

/*This program is made to check that leaving the brackets around the
epxression (c=getchar()) in
the statement while ((c=getchar()) !=EOF) produces a boolean output in
C which would either be
0 (false) or 1 (true). This would happen because the relational
operator != has precedence over the assignment
operator =.
*/

void main()
{

int c;

while (c=getchar() != EOF) putchar(c);

/* Surprisingly, it doesn't produce zeros while I type; rather it
produces some wierd characters that look
half like zeros and half like smileys. And doing a Ctrl+Z, which I
thought was the substitute for EOF does
not produce a 1 (true value) */

}
Nov 14 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Sathyaish <Vi****************@yahoo.com> scribbled the following:
A practice excercise from K&R. Kindly read the comments within the
program. I'd be very grateful to people who helped. Why is it that I
get the wierd face-like characters on the screen instead of the
boolean output 0s or 1s?
Because 0 and 1 are not the same thing as '0' and '1'. Your program
is printing the characters whose character code is 0 and 1, not the
characters '0' and '1' themselves.
#include <stdio.h> /*This program is made to check that leaving the brackets around the
epxression (c=getchar()) in
the statement while ((c=getchar()) !=EOF) produces a boolean output in
C which would either be
0 (false) or 1 (true). This would happen because the relational
operator != has precedence over the assignment
operator =.
*/ void main()
Non-standard form of main(). Better would be int main(void).
{ int c; while (c=getchar() != EOF) putchar(c); /* Surprisingly, it doesn't produce zeros while I type; rather it
produces some wierd characters that look
half like zeros and half like smileys. And doing a Ctrl+Z, which I
thought was the substitute for EOF does
not produce a 1 (true value) */
Note that if c==EOF, the putchar(c) is never called, so your program
will never print a 1 (true value) for any input.
}


--
/-- Joona Palaste (pa*****@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
"War! Huh! Good God, y'all! What is it good for? We asked Mayor Quimby."
- Kent Brockman
Nov 14 '05 #2

P: n/a
Joona I Palaste <pa*****@cc.helsinki.fi> scribbled the following:
Sathyaish <Vi****************@yahoo.com> scribbled the following:
#include <stdio.h> /*This program is made to check that leaving the brackets around the
epxression (c=getchar()) in
the statement while ((c=getchar()) !=EOF) produces a boolean output in
C which would either be
0 (false) or 1 (true). This would happen because the relational
operator != has precedence over the assignment
operator =.
*/ void main()
Non-standard form of main(). Better would be int main(void). { int c; while (c=getchar() != EOF) putchar(c);
This loop is printing the character whose code is 1 (true value)
as long as getchar()!=EOF. Note that 1 and '1' are not the same thing.
/* Surprisingly, it doesn't produce zeros while I type; rather it
produces some wierd characters that look
half like zeros and half like smileys. And doing a Ctrl+Z, which I
thought was the substitute for EOF does
not produce a 1 (true value) */ Note that if c==EOF, the putchar(c) is never called, so your program
will never print a 1 (true value) for any input.

}


I meant, of course, "if getchar()==EOF and therefore c==0, the
putchar(c) is never called, so your program will never print a 0 (false
value) for any input."

--
/-- Joona Palaste (pa*****@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
"Outside of a dog, a book is a man's best friend. Inside a dog, it's too dark
to read anyway."
- Groucho Marx
Nov 14 '05 #3

P: n/a
Thank you so very much, Joona Palaste. Yeah, I realize I flipped the
zeros and ones in writing the original post.

You're de man!

Kind Regards,
Sathyaish Chakravarthy.

Joona I Palaste <pa*****@cc.helsinki.fi> wrote in message news:<c1**********@oravannahka.helsinki.fi>...
Joona I Palaste <pa*****@cc.helsinki.fi> scribbled the following:
Sathyaish <Vi****************@yahoo.com> scribbled the following:
#include <stdio.h> /*This program is made to check that leaving the brackets around the
epxression (c=getchar()) in
the statement while ((c=getchar()) !=EOF) produces a boolean output in
C which would either be
0 (false) or 1 (true). This would happen because the relational
operator != has precedence over the assignment
operator =.
*/ void main()
Non-standard form of main(). Better would be int main(void).

{ int c; while (c=getchar() != EOF) putchar(c);
This loop is printing the character whose code is 1 (true value)
as long as getchar()!=EOF. Note that 1 and '1' are not the same thing.
/* Surprisingly, it doesn't produce zeros while I type; rather it
produces some wierd characters that look
half like zeros and half like smileys. And doing a Ctrl+Z, which I
thought was the substitute for EOF does
not produce a 1 (true value) */
Note that if c==EOF, the putchar(c) is never called, so your program
will never print a 1 (true value) for any input.

}


I meant, of course, "if getchar()==EOF and therefore c==0, the
putchar(c) is never called, so your program will never print a 0 (false
value) for any input."

Nov 14 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.