Problema con scanf y fgets

Esto es para una tarea para ordenar algunas cadenas dadas. Le estoy pidiendo al usuario la cantidad de cadenas con las que le gustaría ordenarscanf, asignando una matriz basada en ese número y luego obteniendo las propias cadenas confgets.

Todo funciona bien si el número de cadenas está codificado, pero la adición descanf para dejar que el usuario decida arruina las cosas. Aquí está el código:

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

#define LENGTH  20 // Maximum string length.

int main(void)
{
    int index, numStrings = 0;
    char **stringArray;
    printf("Input the number of strings that you'd like to sort: ");
    assert(scanf("%d", &numStrings) == 1);
    stringArray = (char **)malloc(numStrings * sizeof(char *));

    for (index = 0; index < numStrings; index++)
    {
        stringArray[index] = (char *)malloc(LENGTH * sizeof(char));
        assert(stringArray[index] != NULL);
        printf("Input string: ");
        assert(fgets(stringArray[index], LENGTH, stdin) != NULL);
    }

    // Sort strings, free allocated memory.

    return 0;
}

Y así es como se ve la consola:

Input the number of strings that you'd like to sort: 3
Input string: Input string: foo
Input string: bar

Se salta la primera iteración del bucle, lo que da como resultado una cadena vacía al comienzo de la matriz. Mi pregunta es, ¿por qué hace eso y cómo puedo solucionarlo?

Esto es lo que parece la consola con la cadena de formato"%d\n" pasó ascanf:

Input the number of strings that you'd like to sort: 3
foo
Input string: Input string: bar
Input string: baz

Entonces, puedo ingresar todas las cadenas, pero el primer mensaje para una cadena está en el lugar incorrecto.

Respuestas a la pregunta(2)

Su respuesta a la pregunta