Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - flowrd23

#1
Ya intenté probando limpiadores de buffers...fflush, .....getchar, etc. NO CONSIGO solución, ahora me saltea los scanf que levantan  año y ubicación.
void ingresar_Nodo(){
nodo *nuevo=(nodo *) malloc(sizeof(nodo));

printf("Ingrese datos del álbum:\n");
printf("Album: ");
fgets(nuevo->album, 50, stdin);
getchar();
//scanf("%s", nuevo->album);
//fflush(stdout);
printf("Nombre:");
fgets(nuevo->nombre, 50, stdin);
getchar();
//scanf("%s",nuevo->nombre);
//fflush(stdout);
printf("Soporte: ");
fgets(nuevo->soporte, 31, stdin);
getchar();
printf("Año:");
scanf("%d", &nuevo->year);
getchar();
printf("\nCategoría: ");
fgets(nuevo->category, 31, stdin);
getchar();
//scanf("%s",nuevo->category);
//fflush(stdout);
printf("Ubicación física: ");
scanf("%d",&nuevo->ubicacion);

nuevo->siguiente=NULL;
if(primero==NULL){
primero=nuevo;
ultimo=nuevo;
}else{
ultimo->siguiente=nuevo;
ultimo=nuevo;
}

}
#2
Respecto al código anterior, es funcional con scanf si las entradas de palabras no tienen espacio.  Cómo incorporo correctamente fgets? probé cambiando todos los scanf que reciben caracteres con fgets pero así lo pasa por alto y vuelve al menú...
Necesito resolver esto, para avanzar más.
#3
Gracias....
Cómo uso el fgets?
Traté de usar para una sola entrada para el miembro nombre (ignorando y borrando los demás miembros de la estructura nodo) :  fgets(nuevo->nombre, 31, stdin);  y NO FUNCIONA....
/*5 El programa para ubicar un disco de una colección de música que se encuentra ordenada en
estantes debe tener los siguientes datos:
a Nombre el disco
b Grupo musical
c Soporte (vinilo, CD, cassette)
d Año de lanzamiento
e Categorı́a (clásica, jazz, folclore, tango, etc)
f Ubicación (estante en el cual se encuentra)*/
#include <stdio.h>
#include <stdlib.h>
typedef struct nodo{
char album[50];
char nombre[50];
char soporte[31];
int year;
char category[31];
int ubicacion;
struct nodo *siguiente;
}nodo;
void ingresar_Nodo();
void desplegar_Lista();
nodo *primero=NULL;
nodo *ultimo=NULL;
FILE *a;
int main(){
puts("----BIENVENIDO---\t\n");
int OPTION;
do{
printf("1) Ingresar álbum.\n 2) Desplegar la lista completa de discos.\n 3)SALIR.\n");
scanf("%d", &OPTION);
switch(OPTION){
case 1:
ingresar_Nodo();
break;
case 2:
desplegar_Lista();
break;
}
}while(OPTION!=3);
return 0;
}
void ingresar_Nodo(){
nodo *nuevo=(nodo *) malloc(sizeof(nodo));

printf("Ingrese datos del álbum:\n");
printf("Album: ");
scanf("%s", nuevo->album);
fflush(stdout);
printf("Nombre:");
scanf("%s",nuevo->nombre);
fflush(stdout);
printf("Soporte: ");
scanf("%s",nuevo->soporte);
fflush(stdout);
printf("Año: ");
scanf("%d",&nuevo->year);
printf("Categoría: ");
scanf("%s",nuevo->category);
fflush(stdout);
printf("Ubicación física: ");
scanf("%d",&nuevo->ubicacion);
nuevo->siguiente=NULL;
if(primero==NULL){
primero=nuevo;
ultimo=nuevo;
}else{
ultimo->siguiente=nuevo;
ultimo=nuevo;
}

}
void desplegar_Lista(){
puts("\tDESPLEGANDO LISTA COMPLETA....\n");
nodo *auxiliar=(nodo *) malloc(sizeof(nodo));
int i=0;
auxiliar=primero;
while(auxiliar!=NULL){
printf("%s\n %s\n %s\n %d\n %s\n %d\n\n", auxiliar->album, auxiliar->nombre, auxiliar->soporte, auxiliar->year, auxiliar->category, auxiliar->ubicacion);
auxiliar=auxiliar->siguiente;
i++;
}if(i==0){
puts("LISTA VACÍA!\n");
}
}


#4
Muchas gracias por responder.
El problema es que vuelve a ingresar automáticamente a la opción 1 luego de ingresar el primer el primer dato a la lista.
Una captura:
https://ibb.co/jyyWwX3
#5
Estoy empezando a entender listas, tengo el siguiente problema: El menú de opciones vuelve a repetirse indefinidamente luego de devolver "inicio", en vez de volver a solicitar una opción al usuario ¿Qué anda mal?


/*5 El programa para ubicar un disco de una colección de música que se encuentra ordenada en
estantes debe tener los siguientes datos:
a Nombre el disco
b Grupo musical
c Soporte (vinilo, CD, cassette)
d Año de lanzamiento
e Categorı́a (clásica, jazz, folclore, tango, etc)
f Ubicación (estante en el cual se encuentra)
5.1 La base de datos debe crecer y decrecer dinámicamente.
5.2 Debe permitir buscar y mostrar la búsqueda de cualquiera de los datos miembro.
5.3 Debe permitir el ordenamiento.*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct NODO {
char nombre[31];
char grupo[31];
int year;
char categoria[31];
struct NODO *siguiente;
}NODO;

void crearLista(NODO *);//ASÍ ES *crearLista(), ES UNA FUNCIÓN QUE DEBERÍA DEVOLVER UN PUNTERO A UN TIPO NODO.
//Y en el argumento de la función tenemos que necesita recibir un puntero a un tipo de struct NODO.
int main(){
NODO *inicio=NULL;
int OPTION=0;
puts("Ingrese una opción.\n");


do{
printf("1- AGREGAR ARTISTA A LA LISTA \n2-BUSCAR GRUPO MUSICAL EN LA LISTA\n3-LISTAR TODO LOS DATOS\n4-SALIR\n\n");
scanf("%d", &OPTION);

switch(OPTION){
case 1:
puts("Ingrese los datos del grupo: \n");
crearLista(inicio);
break;
break;
case 2:
puts("NOT AVAIBLE");
break;
case 3:
puts("NOT AVAIBLE");
break;
//default: printf( "Opción no válida\n" );
                //break;
}
  }while(OPTION !=4);
return 0;
}
void crearLista(NODO *inicio){


NODO *ptr, *newNodo;
newNodo= (NODO *) malloc(sizeof(NODO));
if(newNodo==NULL){
printf("OUT OF MEMORY.\n");
}
printf("Nombre:\n ");
gets(newNodo->nombre);
getchar();
printf("Grupo:\n ");
gets(newNodo->grupo);
getchar();
puts("\nAño de lanzamiento: ");
gets(&newNodo->year);
getchar();
puts("\nCategoría: ");
gets(newNodo->categoria);
getchar();
if(inicio==NULL){
newNodo->siguiente=NULL;
inicio=newNodo;

}else{
ptr=inicio;
while(ptr->siguiente!=NULL){
ptr=ptr->siguiente;
}
ptr->siguiente=newNodo;
newNodo->siguiente=NULL;
      }

}