I know that most terminals work by default in line buffering mode. that is, the output is buffered and not directed to stdout until a newline character is encountered.
So I expected this to not print anything (at least until the buffer is full):
int main() { while(1) { printf("Haha"); sleep(1); } return 0; }
It really doesn't print anything for a short period of time.
If I want to print "Haha" every second, I can either printf("Haha\n") or do fflush(stdout) after printf. (I know this is not so portable, but this solution nonetheless)
Now I recall the very classic scanf program (with my addition to while (1) loop, to prevent buffer flushing when the program exits):
int main() { char char_in; while(1) { printf("Haha. Input sth here: "); scanf("%c", &char_in); } return 0; }
Now the program prints Haha. Input sth here: Haha. Input sth here: (and wait for input). It is not here if I delete the scanf statement. Why is this so?
Thanks.
c stdio
Chung lun yuen
source share