Newsgroups: comp.lang.c
Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!cunixf.cc.columbia.edu!cubmol!ping
From: ping@cubmol.bio.columbia.edu (Shiping Zhang)
Subject: Re: Strange Behavior?
Message-ID: <1991May8.204009.1694@cubmol.bio.columbia.edu>
Reply-To: ping@cubmol.bio.columbia.edu (Shiping Zhang)
Organization: Dept. of Biology, Columbia Univ., New York, NY
References: <1991May8.020720.20170@mccc.edu>
Date: Wed, 8 May 91 20:40:09 GMT

In article <1991May8.020720.20170@mccc.edu> pjh@mccc.edu (Peter J. Holsberg) writes:
>Here is an extract from a program a student wrote.  Note that he has
>declared "input" incorrectly.  The strange behavior is that, when choice
>"1" is made, the print function outputs all but the first line that was
>entered.  Can anyone explain that in terms of what scanf() is doing to
>memory near "input"?  (This is on a 386, if endianism matters.)
 
[...]

>   char sentence [MAX][SIZE];   /* an array of strings */
>   char *point[MAX];            /* an array of pointers to char */
>   char *orginal[MAX];          /* an array holding the orginal sequence */
>   char input;	/* SHOULD HAVE BEEN int input!!!  */
 
[...]
 
>	printf("Make a choice: ");
>	scanf ("%d" , &input);      /* value converted to decimal integer

I think it results from declaring input as char and using it as int
in scanf(). When scanf() writes 1 into the location of input, it puts
into 0's those bits that belong to the first byte(s) of sentence[0],
terminating sentence[0] at its first byte.  I could be wrong, though.

-ping

