stdout/stdin + flushing buffers

Hi all

I've run into a snag in a program of mine where part of what I entered in at the start of run-time, instead of the current value within printf() is being printed out.

After failing with fflush() and setbuf(), I tried the following approach


void BufferFlusher()
{
   int in=0;
   char c;

   while( (in = getchar()) != NULL)
   {
       c = (char) in;
       c = NULL;
       fputc((int)c,stdin);
   }


}

however this has not improved things (even with replacing getchar() with fgetc(stdin) ).

Thanks heaps in advance

It's not clear (to me) what you are trying to do here: why can you not use fflush to flush a buffer?
Some immediate observations, though:
getchar returns EOF if nothing is read, rather than a NULL pointer, so don't compare its return value to NULL.
Writing to stdin is unlikely to succeed -- check the return value of fputc.

First off I'm not sure what you're trying to do here but to reinforce what has already been stated by spirtle the code needs to be rectified.
There's no need to cast the int read from standard input to char so the char c; c = (char) in; and c = NULL; statements are unneccessary as this one suffices.

int in;

The terminal condition for the while loop should check for EOF instead of NULL

while((in = getchar()) != EOF)

and fputc() writes to stdout NOT stdin

fputc(in, stdout);

Ok, I will try and re-specify my problem

Basically Im trying to get a simple prompt being displayed (via printf() ) and have a user respond to it accordingly (via scanf() ).

However this is difficult because the prompt is not being displayed, and previous input I entered in (via another printf() and scanf() ) seems to appear in its place.

Does this make sense

Your code has neither the printf() nor scanf() functions so I am still at a loss to understand what exactly is going on here. You need to attach the entire code and explain what it is doing otherwise with the scant information presented in your post it's not making any sense.

Hi guys

Please find my code in the attachments

Ok the aim of my script is to do the following

a) Prompt the user to enter in a folder they wish to browse to

b) Rename the folder via the use of a prompt and a system() call to mv

c) Within the folder, replace all subfolder names containing a certain string with a new string

d) Copy the renamed folder and the modified subfolder names to an external location

e) At the destination, repeat c)

I am experiencing my prompting issue at b).

This is the line of code at b)

new_src = (char *)malloc(20);
printf("\nEnter new directory name: ");
scanf("%s",new_src);

After debugging, I have found that new_src contains a portion of the char *ptr value I entered into a), which then mysteriously gets printed out at the printf() in b) at the scanf() part

FYI I used multiple calls to printf("\n===================") yesterday before b) and it seemed to alleviate the issue, however this came from a trial and error, rather than a methodical approach

The entire script is in the word doc file. You can find the functions individually in the text files

Is this enough for you guys to work with ?

as far as i know, all functions using a FILE * do buffered I/O. This means, that data is not written immediately, but when the kernel thinks, it is the right time. This is normally the case, when a line is finished (when there is a \n). But a fflush() does also the trick. In your case you have to put an fflush(stdout); between printf() and scanf(). Any other location does not help, because the scanf is the location, where your program waits for user input.

According to C standards, fflush() on stdin produces undefined results. That means if it works it is by pure luck.

If you read the FAQ here:
http.cboard.cprogramming.com

Ther is a discussion of "fflushing" stdin and how to deal with it.

Granted, the OP seems to have some confusion in destinguishing input from output, but I don't think anyone suggested to him to fflush stdin.

In my code, there is an erronous call to fflush(stdin). Even after removing this and using

printf()
fflush(stdout)
scanf()

which is in my code btw, this has not rectified the problem.

Im not sure what could be the cause of error at this stage.