scanf Getting Skipped [duplicate]

The new-line character present in stdin after the previous int was entered will not have been consumed by the last call to scanf(). So the call to scanf() after the for loop consumes the new-line character and continues without the user having to enter anything.

To correct without having to add another scanf() call you could use format specifier " %c" in the scanf() after the for loop. This will make scanf() skip any leading whitespace characters (including new-line). Note it means the user will have to enter something other than a new-line to end the program.

Additionally:

  • check the result of scanf() to ensure it actually assigns a value to the variables passed in:

    /* scanf() returns number of assigments made. */
    if (scanf("%d", &userValue) == 1)
    
  • this is an assignment (and will always be true):

    if (a = 1){ /* Use == for equality check.
                   Note 'a' could be removed entirely and
                   replace with: if (isPrime(x)) */
    

Leave a Comment