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.