Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: leopaez en 9 Diciembre 2016, 12:41 pm



Título: Arreglo dinamico string
Publicado por: leopaez en 9 Diciembre 2016, 12:41 pm
Muy buenos días, tengo un problema al querer desarrollar un programa en C++ que me permita guardar N cantidad de estudiantes en un arreglo tipo string, la cantidad de estudiantes a guardar debe ser digitada por  el usuario cada vez que se ejecuta el programa. El programa compila bien no presenta errores pero al ajecutarlo despues de ingresar el  segundo nombre se presenta un error. Copio el codigo espero e puedan ayudar.

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5.  
  6. using namespace std;
  7.  
  8. int n, i, j;
  9. string *a=new string[n];
  10.  
  11.  
  12. int main()
  13. {
  14. cout << "Por favor ingrese la cantidad de estudiantes a registrar: "<<endl;
  15.    cin>>n;
  16.    for(i = 0; i <n; i++)
  17.     {
  18.          cout << "Nombre: ";
  19.          cin.ignore(256,'\n');
  20.          getline (cin, a[i]);
  21.  
  22.       }
  23.  
  24. return 0;
  25.  
  26. }
  27.  


Mod: Los códigos deben ir en etiquetas GeSHi


Título: Re: Arreglo dinamico string
Publicado por: jvm1994 en 9 Diciembre 2016, 19:23 pm
Primero asignas el espacio en memoria a tu string y luego le preguntas a el usuario de que tamaño va a ser el string?

Es decir, como puede el string tener como indice maximo N, cuando siquiera inicializaste el valor de n?

Deberías crear el puntero a string --> Pedir la cantidad de indices (valor de n) --> Y después construir el string.


Título: Re: Arreglo dinamico string
Publicado por: leopaez en 10 Diciembre 2016, 12:09 pm
Gracias, tienes toda la razón ya hice las correcciones y programa trabaja correctamente. Estaba bloqueado. Este parte de código conforma un programa más grande y ya casi lo termino.

Código
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstdio>
  4. #include <cstring>
  5.  
  6. using namespace std;
  7.  
  8. int n, i, j;
  9. string *a;
  10.  
  11.  
  12.  
  13. int main()
  14. {
  15.  
  16. cout << "Por favor ingrese la cantidad de estudiantes a registrar: "<<endl;
  17. cin>>n;
  18. a=new string[n];
  19.    for(i = 0; i <n; i++)
  20.         {
  21.                cout << "Nombre: ";
  22.                fflush(stdin);
  23. getline (cin, a[i]);
  24.               }
  25.       delete [] a;
  26.  
  27. return 0;
  28. }
  29.  

 


Título: Re: Arreglo dinamico string
Publicado por: engel lex en 10 Diciembre 2016, 21:43 pm
Código:
fflush(stdin);

esto no se debe hacer nunca... fflush solo está diseñado para stdout y puede generar comportamiento inesperado en stdin, debes usar algún otro medio


aqui 2 temas sobre ello
Why fflush(stdin) is wrong (http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1052863818&id=1043284351)

Flush the input buffer (http://faq.cprogramming.com/cgi-bin/smartfaq.cgi?answer=1044873249&id=1043284392)