Programación General > Visual C++
problema con mi agena
tig0:
hola, tengo un problemilla con este programa, que no se porque no puedo meter mas de 2 o 3 entradas porque me tira un error el ejecutable y no entiendo por que, creo que deberia tirar bien pero no se, a ver si alguien me dice qué es lo que estoy haciendo mal xDDD
--- Código: C++ ---#include <iostream>#include <string>#include <sstream>using namespace std; int contador=0; class datos { private: string numeros; char nomape[40]; char dir[50]; char poblacion[10]; int tel, telfijo; public: datos(); void mostrardatos(void); }*per[40]; datos::datos(){ cout << "n introduce nombre y apellidos "<<endl; cin.getline (nomape, sizeof(nomape)); cout << "n introduce direccion "<<endl; cin.getline (dir, sizeof(dir)); cout << "n introduce poblacion "<<endl; cin.getline (poblacion, sizeof(poblacion)); cout << "n introduce telefonos, primero fijo 2 movil "<<endl; getline (cin, numeros); stringstream (numeros) >> telfijo; getline (cin, numeros); stringstream (numeros) >> tel; }void datos::mostrardatos(void){ cout << "nombre : " << nomape<<endl; cout << "direccion : "<<dir<<endl; cout << "poblacion : "<<poblacion<<endl; cout << "Tel fijo : "<<telfijo << " tel movil : "<<tel<<endl; } int main () { int opcion; string mystr; loop: int contemp=0; cout << "introduce opcion, 1=grabar, 2=mostrar, 0=salir "<<endl; cin >> opcion; cin.get(); switch (opcion){ case 0: break; case 1: cout << "introduce entradas "<<endl; cin>>contemp; cin.get(); for (int n=0;n<contemp;n++){ per[(n+contador)]=new datos; contador++;} goto loop; case 2: for (int n=0;n<contador;n++){ per[n]->mostrardatos();} goto loop; default: cout << "opcion erronea"<<endl; goto loop;} cin.get(); return 0;}
Eternal Idol:
En este bucle:
--- Código: C++ ---for (int n=0;n<contemp;n++){ per[(n+contador)]=new datos; contador++;} goto loop;
Tanto n como contador son incrementados en cada pasada por lo cual el elemento sera 0, 2, 4, 6, etc.
Sinceramente veo muchas cosas extrañas, como usar goto en C++, usar contador como una variable global, contemp y contador ahi juntos ... en fin, en el bucle de mostrar usas contador como limite (¿Para que usar contemp entonces?) y si accedes a todos los elementos, por logica el elemento 1 es un puntero invalido (nulo si hay suerte).
tig0:
entonces que tendria que ser, per[n]=new datos?
ves muchas cosas extañas porque empece a programar hace 3 semanas y hay muchas cosas que no se como hacerlas e intento apañarmelas como puedo XDDD
Lo del goto lo hice porque no se me ocurria como volver patras, el contemp lo estaba usando porque lo queria usar de limite para el bucle, para que por ejemplo cuando ya has introducido los datos, si quiere añadir mas elementos, que no los reemplace por los que habia. porque si hago per[n]=new datos entonces no se joderia el per[0]?
Esque a veces estoy muy confuso, porque solo he podido seguir un tutorial de c++, que esta en ingles, y me deja muchas cosas en el aire. Entonces arreglando ese bucle podria hacer que no me petara?
Eternal Idol:
Si, de esta manera tiene mas logica:
--- Código: C++ ---cin >> contador;cin.get();for (int n = 0; n < contador; n++){ per[n] = new datos; //sigue
Tampoco es lo ideal tener un array de punteros de tamaño fijo (per), si llegan a poner 45 entradas tenes problemas por ejemplo ...
En cuanto al goto lo podes reemplazar por un bucle for facilmente, todos los case tienen que tener su break al igual que el primero sino sigue la ejecucion y eso no es lo que queres:
--- Código: C++ ---for (bool salir = false; !salir;)... case 0: salir = true; break;
tig0:
hola, lo he reescrito y weno, aunque esta mejor definido ahora me peta a la 5 o 6 entrada que hago. te pego el codigo que he hecho esta vez.
--- Código: C++ ---#include <iostream>#include <string>#include <sstream>using namespace std; void incr(void);void mostrar(void); class datos { private: string numeros; char nomape[40]; char dir[50]; char poblacion[10]; int tel, telfijo; public: datos(); void lista(void); }*per[40];int contador=0; datos::datos(){ cout << "n introduce nombre y apellidos "<<endl; cin.getline (nomape, sizeof(nomape)); cout << "n introduce direccion "<<endl; cin.getline (dir, sizeof(dir)); cout << "n introduce poblacion "<<endl; cin.getline (poblacion, sizeof(poblacion)); cout << "n introduce telefonos, primero fijo 2 movil "<<endl; getline (cin, numeros); stringstream (numeros) >> telfijo; getline (cin, numeros); stringstream (numeros) >> tel; }void datos::lista(void){ cout << "nombre : " << nomape<<endl; cout << "direccion : "<<dir<<endl; cout << "poblacion : "<<poblacion<<endl; cout << "Tel fijo : "<<telfijo << " tel movil : "<<tel<<endl; }void incr(void){ per[contador]=new datos; contador++;} void mostrar(void){ for (int n=0;n<contador;n++){ per[n]->lista();}} int main () { int opcion; bool salir=false; while (salir!=true){ cout << "n Que desea hacer? 1 = Grabar, 2 = Mostrar, 0 = salir" <<endl; cin >> opcion; cin.get(); switch (opcion){ case 0: salir=true; break; case 1: incr(); break; case 2: mostrar(); break; default: cout << "n Opcion Erronea "<<endl; break; } } cin.get(); return 0; }
Navegación
[#] Página Siguiente
Ir a la versión completa