elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Problema con LISTAS y un switch. en: 5 Agosto 2019, 00:05 am
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.
Código
  1. void ingresar_Nodo(){
  2. nodo *nuevo=(nodo *) malloc(sizeof(nodo));
  3.  
  4. printf("Ingrese datos del álbum:\n");
  5. printf("Album: ");
  6. fgets(nuevo->album, 50, stdin);
  7. //scanf("%s", nuevo->album);
  8. //fflush(stdout);
  9. printf("Nombre:");
  10. fgets(nuevo->nombre, 50, stdin);
  11. //scanf("%s",nuevo->nombre);
  12. //fflush(stdout);
  13. printf("Soporte: ");
  14. fgets(nuevo->soporte, 31, stdin);
  15. printf("Año:");
  16. scanf("%d", &nuevo->year);
  17. printf("\nCategoría: ");
  18. fgets(nuevo->category, 31, stdin);
  19. //scanf("%s",nuevo->category);
  20. //fflush(stdout);
  21. printf("Ubicación física: ");
  22. scanf("%d",&nuevo->ubicacion);
  23.  
  24. nuevo->siguiente=NULL;
  25. if(primero==NULL){
  26. primero=nuevo;
  27. ultimo=nuevo;
  28. }else{
  29. ultimo->siguiente=nuevo;
  30. ultimo=nuevo;
  31. }
  32.  
  33. }
2  Programación / Programación C/C++ / Re: Problema con LISTAS y un switch. en: 4 Agosto 2019, 01:53 am
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  Programación / Programación C/C++ / Re: Problema con LISTAS y un switch. en: 4 Agosto 2019, 01:49 am
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....
Código
  1. /*5 El programa para ubicar un disco de una colección de música que se encuentra ordenada en
  2. estantes debe tener los siguientes datos:
  3. a Nombre el disco
  4. b Grupo musical
  5. c Soporte (vinilo, CD, cassette)
  6. d Año de lanzamiento
  7. e Categorı́a (clásica, jazz, folclore, tango, etc)
  8. f Ubicación (estante en el cual se encuentra)*/
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. typedef struct nodo{
  12. char album[50];
  13. char nombre[50];
  14. char soporte[31];
  15. int year;
  16. char category[31];
  17. int ubicacion;
  18. struct nodo *siguiente;
  19. }nodo;
  20. void ingresar_Nodo();
  21. void desplegar_Lista();
  22. nodo *primero=NULL;
  23. nodo *ultimo=NULL;
  24. FILE *a;
  25. int main(){
  26. puts("----BIENVENIDO---\t\n");
  27. int OPTION;
  28. do{
  29. printf("1) Ingresar álbum.\n 2) Desplegar la lista completa de discos.\n 3)SALIR.\n");
  30. scanf("%d", &OPTION);
  31. switch(OPTION){
  32. case 1:
  33. ingresar_Nodo();
  34. break;
  35. case 2:
  36. desplegar_Lista();
  37. break;
  38. }
  39. }while(OPTION!=3);
  40. return 0;
  41. }
  42. void ingresar_Nodo(){
  43. nodo *nuevo=(nodo *) malloc(sizeof(nodo));
  44.  
  45. printf("Ingrese datos del álbum:\n");
  46. printf("Album: ");
  47. scanf("%s", nuevo->album);
  48. fflush(stdout);
  49. printf("Nombre:");
  50. scanf("%s",nuevo->nombre);
  51. fflush(stdout);
  52. printf("Soporte: ");
  53. scanf("%s",nuevo->soporte);
  54. fflush(stdout);
  55. printf("Año: ");
  56. scanf("%d",&nuevo->year);
  57. printf("Categoría: ");
  58. scanf("%s",nuevo->category);
  59. fflush(stdout);
  60. printf("Ubicación física: ");
  61. scanf("%d",&nuevo->ubicacion);
  62. nuevo->siguiente=NULL;
  63. if(primero==NULL){
  64. primero=nuevo;
  65. ultimo=nuevo;
  66. }else{
  67. ultimo->siguiente=nuevo;
  68. ultimo=nuevo;
  69. }
  70.  
  71. }
  72. void desplegar_Lista(){
  73. puts("\tDESPLEGANDO LISTA COMPLETA....\n");
  74. nodo *auxiliar=(nodo *) malloc(sizeof(nodo));
  75. int i=0;
  76. auxiliar=primero;
  77. while(auxiliar!=NULL){
  78. 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);
  79. auxiliar=auxiliar->siguiente;
  80. i++;
  81. }if(i==0){
  82. puts("LISTA VACÍA!\n");
  83. }
  84. }
  85.  
  86.  
  87.  
4  Programación / Programación C/C++ / Re: Problema con LISTAS y un switch. en: 5 Julio 2019, 03:08 am
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  Programación / Programación C/C++ / Problema con LISTAS y un switch. en: 4 Julio 2019, 20:49 pm
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?
Código:

/*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;
      }

}
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines