Arreglo dinamico string

Iniciado por leopaez, 9 Diciembre 2016, 12:41 PM

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

leopaez

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 (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>

using namespace std;

int n, i, j;
string *a=new string[n];


int main()
{
cout << "Por favor ingrese la cantidad de estudiantes a registrar: "<<endl;
   cin>>n;
   for(i = 0; i <n; i++)
    {
         cout << "Nombre: ";
         cin.ignore(256,'\n');
         getline (cin, a[i]);
                           
      }
     
return 0;

}



Mod: Los códigos deben ir en etiquetas GeSHi

jvm1994

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.
"La posibilidad de crear tu mundo."

int main()
{
eMundo * Own = world_new();
if(Own != NULL)
{
    world_create(Own);
}

return 0;
}

leopaez

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 (cpp) [Seleccionar]
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>

using namespace std;

int n, i, j;
string *a;



int main()
{

cout << "Por favor ingrese la cantidad de estudiantes a registrar: "<<endl;
cin>>n;
a=new string[n];
    for(i = 0; i <n; i++)
           {
                cout << "Nombre: ";
                fflush(stdin);
getline (cin, a[i]);
               }
        delete [] a;
       
return 0;
}



engel lex

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

Flush the input buffer
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.