From: utzoo!decvax!duke!harpo!seismo!hao!menlo70!sytek!zehntel!tektronix!tekmdp!bronze!davec Newsgroups: net.lang.c,net.misc Title: Re: Simple C Puzzle Article-I.D.: bronze.342 Posted: Tue Jan 4 09:19:50 1983 Received: Thu Jan 6 08:44:19 1983 Concerning the earlier problem posed to the net: ------------------------ This is a (fairly) simple puzzle. Why does this program print "1" instead of "2"? Note: (1/1)+1 == 2 not 1 */ main() { int a,b,*p; b= 1; p= &b; a= b/*p; ++a /* oh? */; printf("%d\n",a); } /* --dmy-- */ ---------------- No doubt your compiler will interpret a= b/*p; ++a /* oh? */; as a= b /* COMMENT */; since the "/*" following the b will be taken as the beginning of a comment string which ends with the "*/" following "oh? ", thus never performing your intended division by *p, nor incrementing "a" on the next line. Your program thus would execute as: b= 1; p= &b; a= b; printf("%d\n",a); resulting with "1" being printed, not "2". A quick solution to this is to change the line with the division to a= b/(*p); and all will work as you intended. A better solution is to leave spaces between your binary operators and their operands, such as a = b / *p; which is much easier to read anyway, and avoids these types of bugs. Dave Cobbley Tektronix, Inc.