Título: ayuda con listas enlazadas en c++!!!! Publicado por: guanaco112 en 1 Marzo 2012, 06:23 am hola si me pueden ayudar con este problema, recien empiezo a programar en c++ y me dejaron un problema con listas enlazadas, en el programa pide ingresar el nombre y hacer una operacion de retirar dinero como en un cajero, y que pueda ser mas de una persona que haga esta operacion, y que el programa parara cuando ya no haya dinero digamos en el cajero...(la cantidd de dinero disponible son 40000 pesos)..esto es lo que llevo, solo me deja ingresar nombre, pero no se como hacer la operacion de resta, aparte tampoco se como hacer para que al finalizar la operacion me vuelva a pedir si quiero ingresar otro nombre :(
gracias!!! #include<iostream.h> #include<conio.h> #include<stdio.h> #include<string.h> #include<stdlib.h> struct _contacto { char nombre[33]; int retirar; struct _contacto *siguiente; }; struct _contacto *primero, *ultimo; void agregar_contacto() { struct _contacto *nuevo; nuevo = (struct _contacto*)malloc(sizeof(struct _contacto)); if(nuevo==NULL){ cout<<"\nNo hay espacio suficiente."; return; } cout<<"\n\ningrese su nombre\n"; cout<<"------------------"; cout<<"\nNombre: "; fgets(nuevo->nombre,32,stdin); nuevo->siguiente = NULL; if(primero==NULL){ primero = nuevo; ultimo = nuevo; } else { ultimo->siguiente = nuevo; ultimo = nuevo; } } void retirar_1() { int retirar; struct _contacto *nuevo; nuevo = (struct _contacto*)malloc(sizeof(struct _contacto)); if(nuevo==NULL){ cout<<"\nNo hay espacio suficiente."; return; } cout<<"ingrese cantidad a retirar:"; cin>>retirar; nuevo->retirar; cout<<endl<<"lo retirado fue:"<<nuevo->retirar; nuevo->retirar; nuevo->siguiente = NULL; if(primero==NULL){ primero = nuevo; ultimo = nuevo; } else { ultimo->siguiente = nuevo; ultimo = nuevo; } } void mostrar(){ ultimo=primero; while(ultimo!=NULL){ cout<<endl<<"nombre:"<<primero->nombre; cout<<endl<<"retiro:"<<primero->retirar; ultimo=ultimo->siguiente; } } void mostrar_menu() { cout<<"\n\n\n Bienvenido\n"; cout<<"======\n"; cout<<"1. Agregar nombre\n"; cout<<"2. retirar dinero\n"; cout<<"3. mostrar datos\n"; cout<<"4. Salir\n"; } int main() { int opcion = 0; char bufferOpcion[5]; while(opcion!=4){ mostrar_menu(); fgets(bufferOpcion,sizeof(bufferOpcion),stdin); sscanf(bufferOpcion, "%d", &opcion); switch(opcion){ case 1: agregar_contacto(); break; case 2: retirar_1(); break; case 3: mostrar(); break; } } return 0; getchar(); } Título: Re: ayuda con listas enlazadas en c++!!!! Publicado por: rir3760 en 2 Marzo 2012, 02:32 am Espero lo tomes como una critica constructiva: si estas aprendiendo C++ te deberian enseñar eso y no la base de C. El programa tiene varios errores algunos de ellos basicos y que no deberian existir en un programa cuya unica finalidad (de nuevo en el caso de C++) es la practica del uso de punteros.
Para empezar los nombres de todos los encabezados estan mal, deberian ser: Código
Hay que evitar el uso de extensiones como la biblioteca conio de Borland. Por favor lee el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html). Tambien debes separar la operacion para agregar un retiro en partes: reserva de memoria (creacion del nodo), peticion de los datos (lectura de un registro) y agregar el registro a la lista El error principal en el programa se debe a la funcion "mostrar": Código Si la lista contiene al menos un nodo al terminar esa funcion "ultimo" no apunta a ese nodo, su valor es NULL y cuando se trate de agregar un nodo a la lista el programa va a reventar (comportamiento no definido). El programa con la mayoria de las correcciones: Código
Falta agregar los detalles que mencionas, eso te toca a ti. Por cierto: el uso de getline y sscanf es solo un "parche mal puesto", lo politicamente correcto es utilizar las clases que la biblioteca estandar de C++ provee para esas operaciones como "string" y "stringstream". Un saludo Título: Re: ayuda con listas enlazadas en c++!!!! Publicado por: guanaco112 en 2 Marzo 2012, 05:03 am MUCHAS GRACIAS POR SUS CONSEJOS , ME HA AYUDADO MUCHISIMO!!!
solo una duda?? la variable temp que funcion tiene??? gracias de nuevo!!! Título: Re: ayuda con listas enlazadas en c++!!!! Publicado por: rir3760 en 2 Marzo 2012, 14:18 pm Tiene la misma función que el array de caracteres utilizado en el programa original (tu programa): obtener una linea de texto y de ahí extraer el retiro.
Un saludo |