• 0 Posts
  • 2 Comments
Joined 3 months ago
cake
Cake day: February 26th, 2026

help-circle

  • I’m too lazy to confirm, but I think scanf (as well as many other I/O functions) works on top of the buffered input. I.e. when you scanned only one character on the first run of scanf but there are more left in the buffer, then subsequent calls will read from that buffer, e.g.

    printf("your prompt>")
    /* you type 123 */
    /* buffer contains: "123" */
    scanf(...)
    /* you scanned 1 char ("1") */
    /* buffer contains: "23" */
    printf("new prompt>");
    /* the prompt has been printed AFTER your previous input but the buffer hasn't been reset! */
    /* buffer contains: "23" */
    /* you type 456 */
    /* buffer contains: "23456" */
    scanf(...)
    /* scanf returns "2" */
    /* buffer contains: "3456" */
    

    In general you have two options:

    1. drain the buffer after / before each loop cycle
    2. use unbuffered I/O

    For both cases, do your research on how to do it :) That K&R from above should be a great start indeed.