Problema con array de strings

Iniciado por JaimeGc05, 20 Enero 2019, 18:45 PM

0 Miembros y 1 Visitante están viendo este tema.

JaimeGc05

Como tendría que hacer para ingresar varios strings que recoge el programa con un bucle??
He probado con esto pero no me funciona:

int main() {
char *array_palabras[10];
char mas_palabras = 'S', palabra[15];
int i = 0;

while ((i <= 10) && (mas_palabras == 'S')) {
printf("Introducir palabra:\n");
gets(palabra);
array_palabras[i] = palabra;
printf("Quieres mas (S/N)?\n");
scanf("%c", &mas_palabras);
getchar();
i++;
}

return 0;
}


Gracias :)

K-YreX

Pon el código entre etiquetas de código GeSHi. Dando a modificar el mensaje puedes elegirlas encima del cuadro de texto.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

K-YreX

Bueno a ver, hay varias cosillas para corregir:
- Lo que has creado es un array de punteros. Si lo haces de esa manera, te faltaría reservar memoria dinámica para cada palabra. Lo suyo si lo haces con memoria estática sería crear una matriz:

const int MAX_PALABRAS = 10;
const int MAX_LONGITUD = 20;
char conjunto_palabras[MAX_PALABRAS][MAX_LONGITUD];
char palabra_actual[MAX_LONGITUD];


- Para recoger una palabra de la entrada estándar te recomiendo usar <fgets()> en lugar de <gets()> es una función más segura y recomendada:

// siguiendo el codigo anterior
printf("Introduce palabra: ");
fgets(palabra_actual, MAX_LONGITUD, stdin);


- Para guardar cada palabra en la matriz usa la función <strcpy()> o su variante <strncpy()>:

//siguiendo el ejemplo anterior
strcpy(conjunto_palabras[i], palabra_actual);


- Para el filtro de entrada que has implementado con el <while()>, es el típico uso que se le da al <do while()>:

do{
    // pedir palabra
    // guardar palabra
    // preguntar si pedir mas palabras
    scanf("%c", &repetir);
    getchar();
}  while(i < MAX_PALABRAS && (repetir == 's' || repetir == 'S');


Espero que te sirva. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;