Strange C Problem

Gregory Kemnitz kemnitz at mitisft.Convergent.COM
Thu May 11 06:11:19 AEST 1989


In article <13812 at paris.ics.uci.edu>, bvickers at bonnie.ics.uci.edu (Brett J. Vickers) writes:
. 
. I've come across a very strange problem in one of my programs.  I'll
. list the function that's causing the problems and then discuss what
. those problems are.
. 
. Globals:  struct msg_node *first_msg, *last_msg;
. 
. void output_msgs()
. {
.   struct msg_node {
.     char string[160];
.     struct msg_node *next;
.     struct msg_node *prev;
.   } *current, *temp;
. 
.   current = first_msg;
.   while (current != NULL) {
.     printf("%s\n",current->string);
.     printf("&");
.     temp = current;
.     current = current -> next;
.     free (temp);
.   }
.   first_msg = NULL;
.   last_msg  = NULL;
. }
. 
. Now, this function is supposed to output all the messages that are on
. the linked list from first to last.  But something strange happens.
. After the function has output its last message, it fails to continue
. on to the next line (printf("&")).  The ampersand isn't output until
                       ^^^^^^^^^^^
. the next call to output_msgs().  
. 
. 
. Why is this happening?   All help appreciated.
. 

No mystery here...

printf needs a newline to print its string.  the &'s are being buffered
by this routine until the printf with a newline is called.  A fix would
be to rework the printf's in the loop or to put a printf("\n") at the
end of the routine.  This routine may also have a bug in that
its first call will not have the ampersand before the string, but all
calls after it will.

Greg Kemnitz



More information about the Comp.lang.c mailing list