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: <1991May10.135552.13472@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> <1991May8.204009.1694@cubmol.bio.columbia.edu> <1991May9.161425.17079@mccc.edu> Date: Fri, 10 May 91 13:55:52 GMT In article <1991May9.161425.17079@mccc.edu> pjh@mccc.edu (Pete Holsberg) writes: ping@cubmol.bio.columbia.edu (Shiping Zhang) writes: <=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.