En este video se enseña que son y el uso de las Estructuras de Estrucuturas y se realiza un ejemplo donde se gestiona la creacion de varias bibliotecas y varios libros a estas a su vez y su consulta.

Codigo con el que se Empieza el Ejercicio (pinchar en descargar enlace como o copiar y pegar a vuestro codigo:

https://www.dropbox.com/s/47vze1l24j66el8/Bloque%206.4.c?dl=0

Aqui teneis el PDF con las funciones mas importantes de String.h:

https://www.dropbox.com/s/zcjlmfq295uqxaa/String.pdf?dl=0

PDF con Ejercicios se pueden hacer del 26 al 29:

https://www.dropbox.com/s/ooponbywy7wlpv0/tema%204.-%20Tipos%20de%20Datos.pdf?dl=0

source

49 Comentarios

  1. /*
    Esta es mi version del programa, esta ligeramente mejorada y con casi las mismas instrucciones. Espero les sirva.

    Bloque 06.04: Estructuras de estructuras y ejemplo de gestion de varias bibliotecas
    Version por: Cesar Gamboa
    Fecha de creacion: 10/11/18
    */
    #include <stdio.h>
    #include <string.h>
    #define const_LongMax 50
    //Prototipos de funciones
    void func_vaciar_cadena();
    void funcAgregaBiblioteca();
    void funcAgregaLibro();
    void funcConsultaLibro();
    void funcCambiarCadena(char cCadena[const_LongMax]);

    typedef struct{
     char nombre_libro[const_LongMax];
     char nombre_autor[const_LongMax];
     int iLleno_libro; 
    }libro;
    typedef struct{
     char nombre_biblioteca[const_LongMax];
     libro li[10]; // Se definen 10 libros maximo por biblioteca
     int iLleno_biblioteca;
    }biblioteca;
    biblioteca bi[3]; //Se definen 3 bibliotecas que es una estructura dentro de una estructura

    int main(){
     system("color 0A"); //Fondo negro y letras verde claro
     func_vaciar_cadena();
     int iOpcion;
     char cKey;
     do{ 
      do{
       system("cls");
       printf("n[ 1 ] Agregar una nueva biblioteca");
       printf("n[ 2 ] Agregar un libro a una biblioteca");
       printf("n[ 3 ] Consultar un libro");
       printf("n[ 4 ] Terminarnn");
       printf("nnSu opcion:");
       scanf("%i",&iOpcion);
      }while(iOpcion<1||iOpcion>4);
      
      switch(iOpcion){  
       case 1:{    
        funcAgregaBiblioteca();
        break;  
       }
       case 2:{    
        funcAgregaLibro();
        break;
       }
       case 3:{    
        funcConsultaLibro();
        break;
       }
       case 4:{
        system("cls");
        printf("nMuchas gracias por usar nuestro software. ");
        //system("pause");    
        return 0;   
        break;
       } 
      }
     }while(iOpcion!=4); 
    }
    void func_vaciar_cadena(){
     //Vacia las estructuras escribiendo 0 en el campo lleno de cada registro
     int i,j;
     for(i=0;i<3;i++){ //3 por que hay 3 bibliotecas
      for(j=0;j<10;j++){ //10 por que hay 10 libros por cada biblioteca   
       bi[i].li[j].iLleno_libro=0;
      }
     } 
    }
    void funcCambiarCadena(char cCadena[const_LongMax]){
     int i;
     for(i=0;i<const_LongMax;i++){
      if(cCadena[i]=='n'){
       cCadena[i]='';
       i=const_LongMax;
      }
     }
    }
    void funcAgregaBiblioteca(){
     printf("nAgregar bibliotecan");
     int i,iEncontrado;
     iEncontrado=0; //Ruta de escape en el ciclo for
     for(i=0;i<3 && iEncontrado==0;i++){//Busca la primera biblioteca vacia para crearla
      if (bi[i].iLleno_biblioteca==0){
       printf("nIntroduzca el nombre de la biblioteca:");
       fflush(stdin);
       fgets(bi[i].nombre_biblioteca,const_LongMax,stdin);
       funcCambiarCadena(bi[i].nombre_biblioteca);
       bi[i].iLleno_biblioteca=1;
       printf("nBiblioteca %s agregada satisfactoriamenten",bi[i].nombre_biblioteca);
       iEncontrado=1;
      }
     }  
     if (iEncontrado==0){
      printf("nNo hay mas espacio para crear bibliotecas nuevasn"); //No encontro ninguen hueco libre  
     }
     system("Pause");
    }
    void funcAgregaLibro(){ 
     int i,j,iOpcion,iEncontrado;   
     printf("nAgregar libro a bibliotecan");
     printf("Numero Biblioteca | Nombre Biblioteca"); 
     for(i=0;i<3;i++){
      if(bi[i].iLleno_biblioteca==1){   
       printf("nt < %i >  t| %s |n",i+1,bi[i].nombre_biblioteca);
      }
     }
     printf("n"); 
     iOpcion=0; 
     do{ 
      printf("nSeleccione la biblioteca a la cual le va a asignar el libro:");
      scanf("%i",&iOpcion);
     }while(iOpcion<1||iOpcion>3);
     i=0; 
     iOpcion–; //Para que guarde el indice de la ubicacion de la biblioteca
     iEncontrado=0; //Ruta de escape 
     for(i=0;i<10&&iEncontrado==0;i++){  
      if (bi[iOpcion].li[i].iLleno_libro==0){
       printf("Introduzca el nombre del libro: ");
       fflush(stdin);
       fgets(bi[iOpcion].li[i].nombre_libro,const_LongMax,stdin);
       funcCambiarCadena(bi[iOpcion].li[i].nombre_libro);
       printf("Introduzca el nombre del autor: ");
       fflush(stdin);
       fgets(bi[iOpcion].li[i].nombre_autor,const_LongMax,stdin);
       funcCambiarCadena(bi[iOpcion].li[i].nombre_autor);
       bi[iOpcion].li[i].iLleno_libro=1;
       printf("nLibro %s escrito por %s creado satisfactoriamenten",bi[iOpcion].li[i].nombre_libro,bi[iOpcion].li[i].nombre_autor);   
       iEncontrado=1;
      }
     }   
     
     if(iEncontrado==0){
      printf("nNo hay mas espacio para crear libros nuevos");
     } 
     system("Pause");
    }
    void funcConsultaLibro(){ 
     int i,j,iOpcion,iEncontrado,iExistencia; 
     char sNombreLibro[const_LongMax];
     char sNombreAutor[const_LongMax];
     iOpcion=0;
     iExistencia=0;
     do{
      printf("nConsultar libron");
      printf("nSeleccione el metodo que desea usar bara consultarn");
      printf("< 1 > Por libron");
      printf("< 2 > Por autorn");
      printf("< 3 > Por bibliotecan");
      scanf("%i",&iOpcion);
     }while(iOpcion<1||iOpcion>3);
     switch(iOpcion){
      case 1: {  
       iEncontrado=0;
       printf("Introduzca el nombre del libro: ");
       fflush(stdin);
       fgets(sNombreLibro,const_LongMax,stdin);
       funcCambiarCadena(sNombreLibro);
       for(i=0;i<3;i++){
        for(j=0;j<10;j++){
         if(strcmp(bi[i].li[j].nombre_libro,sNombreLibro)==0){
          if (iEncontrado==0){
           //Imprime cabecera solo 1 vez
           printf("AutorttTitulotttBiblioteca");
          }
          iEncontrado=1;
          iExistencia++;
          printf("n%s,tt%s,tt%s",bi[i].li[j].nombre_autor,bi[i].li[j].nombre_libro,bi[i].nombre_biblioteca);
         }
        }
       }
       if(iEncontrado==0){
        printf("n* * * Nota: No se encontraron libros bajo ese nombre en ninguna biblioteca * * * ");
       }else{
        printf("n* * * Fin de datos * * * Total en existencia: %inn",iExistencia);
       }  
       break;
      }
      case 2:{
       iEncontrado=0;
       printf("Introduzca el nombre del autor: ");
       fflush(stdin);
       fgets(sNombreAutor,const_LongMax,stdin);
       funcCambiarCadena(sNombreAutor);
       for(i=0;i<3;i++){
        for(j=0;j<10;j++){
         if(strcmp(bi[i].li[j].nombre_autor,sNombreAutor)==0){
          if (iEncontrado==0){
           //Imprime cabecera solo 1 vez
           printf("AutortttTitulotttBiblioteca");
          }
          iEncontrado=1;
          iExistencia++;
          printf("n%s,tt%s,tt%s",bi[i].li[j].nombre_autor,bi[i].li[j].nombre_libro,bi[i].nombre_biblioteca);
         }
        }
       }
       if(iEncontrado==0){
        printf("nn* * * Nota: No se encontraron libros bajo ese autor en ninguna biblioteca * * * ");
       }else{
        printf("nn* * * Fin de datos * * * Total en existencia: %inn",iExistencia);
       }  
       break;
      }
      case 3:{
        iEncontrado=0;
        iExistencia=0;
        printf("Numero Biblioteca | Nombre Biblioteca"); 
        for(i=0;i<3;i++){
         if(bi[i].iLleno_biblioteca==1){   
          printf("nt < %i >  t| %s |n",i+1,bi[i].nombre_biblioteca);
         }
        }
        printf("n"); 
        iOpcion=0; 
        do{ 
         printf("nSeleccione la biblioteca donde listar los libros:");
         scanf("%i",&iOpcion);
        }while(iOpcion<1||iOpcion>3);
        iOpcion–;//Para que coincida con el indice real que empieza en 0        
        for(i=0;i<10;i++){
         if (iEncontrado==0){
           //Imprime cabecera solo 1 vez
           printf("AutortttTitulotttBiblioteca");
         }
         if(bi[iOpcion].li[i].iLleno_libro==1){     
          printf("n%s,tt%s",bi[iOpcion].li[i].nombre_autor,bi[iOpcion].li[i].nombre_libro);
          iEncontrado=1;
          iExistencia ++;
         }
        }
        if (iEncontrado=0){
         printf("nn* * * Nota: No se encontraron libros bajo ese autor en ninguna biblioteca * * * ");
        }else{
         printf("nn* * * Fin de datos * * * Total en existencia: %inn",iExistencia);
        }    
       break;
      }
     } 
     system("Pause");
    }

  2. una preg mas, para q sirve la ruta de escape en 12:08 porque a lo mejor quisiera poner mas bibliotecas y con la ruta de escape meto solo una y entonces el for como q estaria de mas pues solo haria un ciclo,no??

  3. Aquí dejo código inicial, para que podáis seguir el vídeo desde vuestro compilador:

    #include <stdio.h>
    #include <string.h>
    #define N 50

    void vacio();
    void cambio(char palabra[N]);

    int main(){
    int op;
    char key;

    vacio();

    do{
    do{
    printf("Elige una opcion a realizar: n");
    printf("(1) Añadir una nueva biblioteca. n");
    printf("(2) Añadir un libro a la biblioteca. n");
    printf("(3) Consultar un libro. n");
    scanf("%i",&op);

    }while(op < 1 || op > 3);

    switch(op){
    case 1:{
    anadebi();
    break;
    }
    case 2:{
    anadelib();
    break;
    }
    case 3:{
    consulta();
    break;
    }
    }
    printf("Quieres realizar alguna operacion mas? (S/N)");
    fflush(stdin);
    scanf("%c",&key);
    }while(key == 'S' || kay == 's');

    system("pause");
    return 0;
    }

    void vacio(){
    int i,j;
    for(i = 0 ; i < 3 ; i++){
    bi[i].lleno_bi = 0;
    for(j = 0 ; j < 10 ; j++){
    bi[i]lib[j].lleno_lib = 0;
    }
    }
    }

    void cambio(char palabra[N]){
    int i;

    for(i = 0 ; i < N ; i++){
    if(palabra[i] == 'n'){
    palabra[i] = '';
    }
    }
    }

  4. Algunos habrán pensado que si el libro que se consulta o el autor no están en la biblioteca, ¿Qué pasa?

    Yo he utilizado un contador el la función consultar, cada vez que se encuentra un libro o un autor el contador aumenta. al final, si no hay libros o autores con ese nombre el contador será igual a cero (o a lo que sea) y con un if podemos mostrar por pantalla que no se ha encontrado nada.

    Gracias al creador de este contenido y saludos.

    FUNCIÓN CONSULTAR() :

    void consulta(){
    int op,i,j,aux,contador;
    char buscar[N];
    contador=0;
    do{
    printf("Que quieres buscar nombre del libro o nombre del autorn");
    printf("(1)Nombre Libro n");
    printf("(2)Nombre Autor n");
    scanf("%d",&op);
    }while(op<1||op>2);
    switch(op){
    case 1:{
    printf("Introduce el nombre del libro: n");
    fflush(stdin);
    fgets(buscar,N,stdin);
    cambio(buscar);

    for(i=0;i<3;i++){
    aux=1;
    for(j=0;j<10;j++){
    aux=strcmp(buscar,bi[i].lib[j].nombre_lib);
    if(aux==0){
    printf("El libro %s se encuentra en la biblioteca %sn",buscar,bi[i].nombre_bi);
    printf("El autor es %sn",bi[i].lib[i].autor);
    contador++;
    }
    }
    }
    if(contador==0){
    printf(" No hay ningun libro con ese titulo en las bibliotecasn");
    }
    break;
    }
    case 2:{
    printf("Introduce el nombre del autor: n");
    fflush(stdin);
    fgets(buscar,N,stdin);
    cambio(buscar);

    for(i=0;i<3;i++){
    aux=1;
    for(j=0;j<10;j++){
    aux=strcmp(buscar,bi[i].lib[j].autor);
    if(aux==0){
    printf("su libro es %s y se encuentra en la biblioteca
    %sn",bi[i].lib[i].nombre_lib,bi[i].nombre_bi);
    contador++;
    }
    }
    }
    if(contador==0){
    printf(" No hay ningun libro de ese autor en las bibliotecas");
    }
    break;
    }
    }
    }

  5. Hola buenas tengo un problema, al momento de ejecutar y cuando se abre la consola, se queda un rato pensando y despues dice que el archivo .exe a dejado de funcionar.
    Aqui les dejo mi codigo:

    //Realizar un pograma para controlar varias bibliotecas usando estructuras dentro de estructuras

    #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct{
    char nombre_lib[N];
    char autor[N];
    int lleno_lib;
    }libro;

    typedef struct{
    char nombre_bi[N];
    libro lib[10];
    int lleno_bi;
    }biblioteca;

    biblioteca bi[3];

    void vacio();
    void cambio(char palabra[N]);
    void anadebi();
    void anadelib();
    void consulta();

    int main(){
    int op;
    char key;

    vacio();

    do{
    do{
    printf("Elige una opcion a realizar: n");
    printf("(1) Anadir una nueva biblioteca. n");
    printf("(2) Anadir un libro a una biblioteca.n");
    printf("(3) Consultar un libro.n");
    scanf("%i", &op);
    }while (op < 1 || op > 3);

    switch(op){
    case 1:
    anadebi();
    break;
    case 2:
    anadelib();
    break;
    case 3:
    consulta();
    break;
    }
    printf("Quieres realizar alguna operacion mas? (S/N): ");
    scanf("%c",&key);

    }while(key == 'S' || key == 's');

    system("pause");
    return 0;
    }

    void vacio(){
    int i,j;

    for (i = 0; i < N; i++){
    bi[i].lleno_bi = 0;
    for (j = 0; j < 10; j++){
    bi[i].lib[i].lleno_lib = 0;
    }
    }

    }

    void cambio(char palabra[N]){
    int i;

    for (i == 0; i < N; i++){
    if (palabra[i] == 'n'){
    palabra[i] = '';
    }
    }
    }

    void anadebi(){
    int i, aux;

    aux = 0;

    for(i = 0; i < 3 && aux == 0; i++){
    if (bi[i].lleno_bi == 0){
    printf("Introduce un nombre para la biblioteca: ");
    fflush(stdin);
    fgets(bi[i].nombre_bi, N, stdin);
    cambio(bi[i].nombre_bi);

    bi[i].lleno_bi = 1;
    aux = 1;
    }
    }
    if (aux == 0){
    printf("No queda ningun hueco libro para una nueva biblioteca.n");
    }
    }

    void anadelib(){
    int i, op, aux;

    aux = 0;

    for(i = 0; i < 3; i++){
    if(bi[i].lleno_bi == 1){
    printf("(%i) %s. n",i,bi[i].nombre_bi);
    }
    }
    scanf("%i",&op);

    for (i = 0; i < 10 && aux ==0 ; i++){
    if(bi[op].lib[i].lleno_lib == 0){
    printf("Introduce el mnombre del libro: ");
    fflush(stdin);
    fgets(bi[op].lib[i].nombre_lib, N, stdin);
    cambio(bi[op].lib[i].nombre_lib);

    printf("Introduce el mnombre del Autor: ");
    fflush(stdin);
    fgets(bi[op].lib[i].autor, N, stdin);
    cambio(bi[op].lib[i].autor);

    bi[i].lib[i].lleno_lib = 1;
    aux = 1;
    }
    }
    }

    void consulta(){
    int op, i, j, aux ;
    char buscar[N];

    aux = 1;

    do {
    printf("Que quieres buscar, nombre lirbo o nombre autor: n");
    printf("(1) Nombre Libro. n)");
    printf("(2) Nombre Autor. n");
    scanf("%i", &op);
    }while(op < 1 || op > 2);

    switch (op){
    case 1: {
    printf("Introduce el nombre del libro: ");
    fflush(stdin);
    fgets(buscar, N, stdin);
    cambio(buscar);
    for ( i = 0; i < 3; i++){
    aux = 1;
    for(j = 0; j < 10; j++){
    aux = strcmp(buscar, bi[i].lib[j].nombre_lib);
    if (aux == 0){
    printf("El libro %s se encuentra en la biblioteca %s. n ", buscar,bi[i].nombre_bi);
    printf("el Autor del libro es %s. n",bi[i].lib[j].autor);

    }
    }
    }
    break;
    }
    case 2: {
    printf("Introduce el nombre del autor: ");
    fflush(stdin);
    fgets(buscar, N, stdin);
    cambio(buscar);
    for ( i = 0; i < 3; i++){
    aux = 1;
    for(j = 0; j < 10; j++){
    aux = strcmp(buscar, bi[i].lib[j].autor);
    if (aux == 0){
    printf("El libro %s se encuentra en la biblioteca %s. n ", bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
    }
    }
    }
    break;
    }
    }
    }

  6. Bueno por aquí os dejo mi código, está todo igual menos cuando tienes que buscar libros por nombre o autor, esta un poco más optimizado, ya que no busca en las bibliotecas y libros vacios, ademas he añadido (cls) para limpiar el terminal y algunas cosas más . Bueno los dejo por aquí
    :

    //Bloque 6.4: Estructuras de Estructuras y Ejemplo de Gestion de varias Bibliotecas

    #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct{
    char nombre_lib[N];
    char autor[N];
    int lleno_lib;
    }libro;
    typedef struct{
    char nombre_bi[N];
    libro lib[10];
    int lleno_bi;
    }biblioteca;

    biblioteca bi[3];

    void vacio();
    void cambio(char palabra[N]);
    void anadebi();
    void anadelib();
    void consulta ();
    void BuscarLibro();
    void BuscarAutor();

    int main(){
    int op;
    char key;

    vacio();

    do{
    do{
    printf("Elige una opcion a realizar: n");
    printf("(1) Anadir una nueva biblioteca.n");
    printf("(2) Anadir un libro a una biblioteca.n");
    printf("(3) Consultar un libro.n");
    scanf("%i",&op);
    }while(op<1 ||op>3);

    switch(op){
    case 1:{
    anadebi();
    break;
    }
    case 2:{
    anadelib();
    break;
    }
    case 3:{
    consulta();
    break;
    }
    }
    system("pause");
    system("cls");
    printf("Quieres realizar alguna operacion mas? [S/N]: ");
    fflush(stdin);
    scanf("%c",&key);
    system("cls");
    }while(key=='S' || key =='s' || (key!= 'n' && key !='N'));

    system ("pause");
    return 0;
    }

    void vacio(){
    int i,j;
    for(i=0;i<3;i++){
    bi[i].lleno_bi=0;
    for(j=0;j<10;j++){
    bi[i].lib[j].lleno_lib=0;
    }
    }
    }

    void cambio(char palabra[N]){
    int lengh;
    lengh=strlen(palabra);
    palabra[lengh-1]='';
    }

    void anadebi(){
    int i,escape;
    escape=0;
    for(i=0;i<3 && escape==0;i++){
    if(bi[i].lleno_bi==0){
    printf("Introduce un nombre para la biblioteca: ");
    fflush(stdin);
    fgets(bi[i].nombre_bi,N,stdin);
    cambio(bi[i].nombre_bi);

    bi[i].lleno_bi=1;
    escape=1;
    }
    }

    if(escape==0){
    printf("No queda ningun hueco libre para una nueva biblioteca.n");
    }
    }

    void anadelib(){
    int i,op,escape;
    escape=0;

    for(i=0;i<3;i++){
    if(bi[i].lleno_bi==1){
    printf("(%i) %s.n",i,bi[i].nombre_bi);
    }
    }
    scanf("%i",&op);
    for(i=0;i<10 && escape==0;i++){
    if(bi[op].lib[i].lleno_lib==0){
    printf("Introduce el nombre del libro: ");
    fflush(stdin);
    fgets(bi[op].lib[i].nombre_lib,N,stdin);
    cambio(bi[op].lib[i].nombre_lib);

    printf("Introduce el nombre del autor: ");
    fflush(stdin);
    fgets(bi[op].lib[i].autor,N,stdin);
    cambio(bi[op].lib[i].autor);

    bi[op].lib[i].lleno_lib=1;
    escape=1;
    }
    }
    }

    void consulta (){
    int opc;
    char key;
    do{
    do{
    printf("Elige cual va a ser tu accion.n");
    printf("(1) Buscar un libro.n");
    printf("(2) Bucar un autor.n");
    fflush(stdin);
    scanf("%i",&opc);
    }while( opc<1 || opc>2);

    switch (opc){
    case 1:{
    BuscarLibro();
    break;
    }
    case 2:{
    BuscarAutor();
    }
    }
    printf("Quiere realizar alguno otra consulta [S/N]: ");
    scanf("%c",&key);
    }while(key == 'S' || key == 's');
    }

    void BuscarLibro(){
    char librobuscado[N];
    system("cls");
    printf("Introduce el nombre del libro que desea buscar: ");
    fflush(stdin);
    fgets(librobuscado,N,stdin);
    cambio(librobuscado);
    int check;
    check=1;
    int i,j,escape;
    for(i=0;i<3;i++){
    if(bi[i].lleno_bi==1){
    for(j=0;j<10 ;j++){
    if(bi[i].lib[j].lleno_lib==1){
    check=strcmp(librobuscado,bi[i].lib[j].nombre_lib);
    if(check==0){
    printf("Busqueda exitosa. La infomacion referente a este libro es la siguiente: .n");
    printf("Bibloteca: %s.n",bi[i].nombre_bi);
    printf("Titulo: %s.n",bi[i].lib[j].nombre_lib);
    printf("Autor: %s.n",bi[i].lib[j].autor);
    printf("nnn");
    escape=1;
    }
    }
    }
    }
    }
    if(escape!=1){
    printf("Lo siento, el libro buscado no se encuentra en nuestra base de datos.n");
    system("pause");
    }
    }

    void BuscarAutor(){
    char autorbuscado[N];
    system("cls");
    printf("Introduce el nombre del autor que desea buscar: ");
    fflush(stdin);
    fgets(autorbuscado,N,stdin);
    cambio(autorbuscado);
    int check;
    check=1;
    int i,j,escape;
    for(i=0;i<3;i++){
    if(bi[i].lleno_bi==1){
    for(j=0;j<10 ;j++){
    if(bi[i].lib[j].lleno_lib==1){
    check=strcmp(autorbuscado,bi[i].lib[j].autor);
    if(check==0){
    printf("Busqueda exitosa. La infomacion referente a este autor es la siguiente: .n");
    printf("Bibloteca: %s.n",bi[i].nombre_bi);
    printf("Titulo: %s.n",bi[i].lib[j].nombre_lib);
    printf("Autor: %s.n",bi[i].lib[j].autor);
    printf("nnn");
    escape=1;
    }
    }
    }
    }
    }
    if(escape!=1){
    printf("Lo siento, el autor buscado no se encuentra en nuestra base de datos.n");
    system("pause");
    }
    }

  7. Antes que nada muchas gracias por el video; si alguien ve este comentario me gustaría que me dijesen cual es el error en mi código ya que lo he copiado tal cual y me arroja los siguientes errores:
    – Linea 93. [Warning] passing argument 1 of 'fgets' makes pointer from integer without a cast.
    – Linea 94. [Note] expected 'char * _restrict_' but argument is of type 'int'.
    – Linea 76. [Note] expected 'char *' but argument is of type 'int'.

    CÓDIGO EN C.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define N 50

    typedef struct {
    char nombre_lib[N];
    char autor[N];
    int lleno_lib;
    } libro;

    typedef struct {
    char nombre_bi[N];
    libro lib[10];
    int lleno_bi;
    } biblioteca;

    biblioteca bi[3];

    void vacio();
    void cambio(char palabra[N]);
    void anadebi();
    void anadelib();
    void consulta();

    int main(){
    int op;
    char key;

    vacio();

    do{
    do{
    printf("Elige una opcion a realizar: n");
    printf("(1) Añadir una nueva biblioteca.n");
    printf("(2) Añadir un libro a una biblioteca.n");
    printf("(3) Consultar un libro.n");
    scanf("%i",&op);

    }while(op < 1 || op > 3);

    switch(op){
    case 1:{
    anadebi();
    break;
    }
    case 2:{
    anadelib();
    break;
    }
    case 3:{
    consulta();
    break;
    }
    }
    printf("Quieres realizar alguna operacion mas? (S/N): ");
    fflush(stdin);
    scanf("%c",&key);
    }while(key == 'S' || key == 's');

    system ("pause");
    return 0;
    }

    void vacio(){
    int i,j;
    for (i = 0; i < 3; i++){
    bi[i].lleno_bi = 0;
    for (j = 0; j < 10; j++){
    bi[i].lib[j].lleno_lib = 0;
    }
    }
    }

    void cambio(char palabra[N]){
    int i;

    for (i = 0; i < N; i++){
    if (palabra[i] == 'n'){
    palabra[i] = '';
    }
    }
    }

    void anadebi(){
    int i, aux=0;

    for (i=0 ; i<3 && aux==0 ; i++){
    if (bi[i].lleno_bi == 0){
    printf("Introduce un nombre para la biblioteca: ");
    fflush(stdin);
    fgets(bi[i].lleno_bi, N, stdin);
    cambio(bi[i].lleno_bi);

    bi[i].lleno_bi = 1;
    aux=1;
    }
    }

    if (aux==0){
    printf("No existe ningun lugar vacio para agregar una biblioteca.n");
    }
    }

    void anadelib(){
    int i, j, op, aux=0;

    for (i=0 ; i<3 ; i++){
    if (bi[i].lleno_bi == 1){
    printf("(%i) %s.", i+1, bi[i].nombre_bi);
    }
    }
    scanf("%i", &op);

    for (j=0 ; j<10 && aux==0 ; j++){
    if (bi[op].lib[i].lleno_lib == 0){
    printf("Introduce el nombre del libro. n");
    fflush(stdin);
    fgets(bi[op].lib[i].nombre_lib, N, stdin);
    cambio(bi[op].lib[i].nombre_lib);

    printf("Introduce el nombre del autor. n");
    fflush(stdin);
    fgets(bi[op].lib[i].autor, N, stdin);
    cambio(bi[op].lib[i].autor);

    bi[op].lib[i].lleno_lib = 1;
    aux=1;
    }
    }
    }

    void consulta(){
    int op, i, j, aux;
    char buscar[N];

    do {
    printf("¿Por medio de que desea buscar el libro? n");
    printf("(1) Nombre del libro. n");
    printf("(2) Nombre del autor. n");
    scanf("%s", &op);
    } while (op<1 || op>2);

    switch(op){
    case 1:{
    printf("Introduce el nombre del libro: ");
    fflush(stdin);
    fgets(buscar, N, stdin);

    for (i=0 ; i<3 ; i++){
    aux=1;
    for (j=0 ; i<10 ; j++){
    aux = strcmp(buscar,bi[i].lib[j].nombre_lib);
    if (aux==0){
    printf("El libro %s se encuentra en la biblioteca %s.n", buscar, bi[i].nombre_bi);
    printf("El nombre del autor es %s.n", bi[i].lib[j].autor);
    }
    }
    }
    break;
    }
    case 2: {
    printf("Introduce el nombre del autor: ");
    fflush(stdin);
    fgets(buscar, N, stdin);

    for (i=0 ; i<3 ; i++){
    aux=1;
    for (j=0 ; i<10 ; j++){
    aux = strcmp(buscar,bi[i].lib[j].autor);
    if (aux==0){
    printf("El nombre del libro es %s.n", bi[i].lib[j].nombre_lib);
    printf("El libro se encuentra en la biblioteca %s.n", bi[i].nombre_bi);
    }
    }
    }
    break;
    }
    }
    }

  8. Pongo mi grano de arena para los que no les funciona tu ejercicio:

    #include<stdio.h>
    #include<string.h>

    #define M 50

    typedef struct
    {
    char nombre_lib[M];
    char autor[M];
    }libro;

    typedef struct
    {
    char nombre_bi[M];
    libro lib[5];
    }librera;

    librera bi[2];

    void ingresar_librerias(char a[])
    {
    printf("Nombre de la libreria: ");
    fflush(stdin);
    fgets(a,M,stdin);
    }

    void ingresar_libros(char a[],char b[])
    {
    printf("Nombre del libro: ");
    fflush(stdin);
    fgets(a,M,stdin);
    printf("Su autor: ");
    fgets(b,M,stdin);
    }

    int main()
    {
    int i;
    char opc,esc[M];
    printf("ttttMENUn");
    printf("Escribes i, ingresaras los libros en la libreran");
    printf("Escribe b, buscaras los libros de la librera con su posicionn");
    while(opc!='s' && opc!='S')
    {
    printf("Elige: ");
    scanf("%c",&opc);
    switch(opc)
    {
    case 'i':
    for(i=0;i<2;i++)
    {
    ingresar_librerias(bi[i].nombre_bi);
    }
    printf("Escoge librera a la que ingresaras libros: ");
    fflush(stdin);
    fgets(esc,M,stdin);
    if(strcmp(esc,bi[0].nombre_bi)==0)
    {
    printf("Ingresando librosn");
    for(i=0;i<5;i++)
    {
    ingresar_libros(bi[0].lib[i].nombre_lib,bi[0].lib[i].autor);
    }
    }
    else if(strcmp(esc,bi[1].nombre_bi)==0)
    {
    printf("Ingresando librosn");
    for(i=0;i<5;i++)
    {
    ingresar_libros(bi[1].lib[i].nombre_lib,bi[1].lib[i].autor);
    }
    }
    else
    {
    printf("No existe libreran");
    }
    break;

    case 'b':
    printf("En cual librera buscaras: ");
    fflush(stdin);
    fgets(esc,M,stdin);
    if(strcmp(esc,bi[0].nombre_bi)==0)
    {
    printf("Imprimiendo librosn");
    for(i=0;i<5;i++)
    {
    printf("El libro %s de autor %s esta en la posicion %dn",bi[0].lib[i].nombre_lib,bi[0].lib[i].autor,i+1);
    }
    }
    else if(strcmp(esc,bi[1].nombre_bi)==0)
    {
    printf("Imprimiendo librosn");
    for(i=0;i<5;i++)
    {
    printf("El libro %s de autor %s esta en la posicion %dn",bi[1].lib[i].nombre_lib,bi[1].lib[i].autor,i+1);
    }
    }
    else
    {
    printf("No existe esa libreran");
    }
    break;
    }
    }
    system("pause");
    return 0;
    }

  9. +Empieza a Programar no he podido solucionar este ejercicio:
    /*27.- Se dispone de la información relativa a 100 estaciones meteorológicas diferentes
    repartidas por una determinada área geográfica. Conocemos el nombre de las estaciones y
    la cantidad de lluvia en litros/m2 que recogieron durante el año pasado en cada uno de los
    12 meses. Implementa la estructura adecuada para almacenar dicha información. Realiza
    las funciones necesarias para determinar en qué punto llovió más y en cual menos y la
    cantidad media de agua recogida en las estaciones meteorológicas durante cada mes*/

    Todo esta perfecto pero me trabo cuando tengo que realizar el promedio para saber donde llovio mas, cosa obvia parece pero me trabe espero alguien me ayude

  10. Ante todo una felicitación a los creadores de este canal. Me han ayudado a entender muchas cosas.
    En efecto, pude detectar un par de detalles, el primero cuando se llenan los libros no avisa eso es muy simple. La que realmente me puso a pensar es como solucionar el problema de añadir un libro cuando una biblioteca no existe, para ello solo condicione con
    for(j = 0; j < 1; j++){
    aux2 = bi[1].lleno_bi; // dentro de corchetes pongo 1 ya que basta con que una biblioteca este creada para que
    // se cumpla la condición
    }
    y todo el contenido de anadelib a partir del scanf lo condiciono con

    if(aux2 == 1){
    .
    .
    .
    }
    else{
    printf("Debes introducir primero una biblioteca. n");
    }
    automáticamente el vuelve a preguntar si deseas realizar si quieres otra operación.

  11. Hola!

    lo primero muchas gracias por el vídeo.

    he copiado el código tal cual intentando hacerlo por mi parte y revisando unas cuantas veces y creo que lo tengo idéntico a ti pero aún así cuando ejecuto el programa y después de haber añadido libros y bibliotecas cuando intento buscar realiza la búsqueda me imprime el resultado pero se cierra la consola con un error de windows… podríais ayudarme de alguna manera?

  12. De verdad gracias por realizar estos vídeos se que hace tiempo que los publicaste pero igual me son de utilidad, en este encontré un detalle que al correr el programa y es que si solo he añadido una biblioteca y decido agregar un libro me aparece un menú para elegir a que biblioteca agregarlo con los números 0,1,2 como opciones en 0 la biblioteca que agregue y las que están vacías sin nombre pero igual me permite agregar libros sin haber creado las bibliotecas y consultarlos. por eso se me ocurrió crear una condición en anadelib() en la parte del menú if(bi[i].lleno_bi==1){ …} para que solo muestre las bibliotecas que se han creado. Excelentes vídeos (y)

  13. Emilio, ayuda, pliss, cuando realizo la consulta de la biblioteca que ingrese y el libro que ingrese, buscando por nombre del libro o autor no me sale el nombre de la biblioteca 🙁

    #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct{
    char nombre_lib[N];
    char autor[N];
    int lleno_lib;
    }libro;

    typedef struct{
    char nombre_bi[N];
    libro lib[10];
    int lleno_bi;
    }biblioteca;

    biblioteca bi[3];

    void vacio();
    void cambio(char palabra[N]);
    void anadebi();
    void anadelib();
    void consulta();

    int main (){

    int op;
    char key;

    vacio();
    system ("cls");

    do{
    do{
    printf ("nn Elije que deseas hacer: nn");
    printf (" (1) Anadir una nueva biblioteca.n");
    printf (" (2) Anadir un libro a una biblioteca.n");
    printf (" (3) Consultar un libro.n");
    printf ("n Opcion: ");
    scanf ("%i",&op);
    }while (op < 1 || op > 3);

    switch (op){
    case 1: {
    anadebi ();
    break;
    }
    case 2:{
    anadelib();
    break;
    }
    case 3:{
    consulta();
    break;
    }
    }
    printf ("n Introduce si deseas realizar otra operacion: (S/N) ");
    fflush (stdin);
    scanf ("%c",&key);
    system ("cls");
    }while (key == 'S' || key == 's' );

    system ("pause");
    return 0;
    }

    void vacio(){

    int i,j;

    for (i = 0; i < 3 ; i++){
    bi[i].lleno_bi = 0;
    for(j = 0; j < 3; j++){
    bi[i].lib[j].lleno_lib = 0;
    }
    }
    }

    void cambio(char palabra[N]){

    int i;

    for (i = 0; i < N; i++){
    if (palabra[i] == 'n'){
    palabra[i] = '';
    }
    }
    }

    void anadebi(){

    int i, aux;
    aux = 0;

    for (i = 0; i < 3 && aux == 0; i++){

    if (bi[i].lleno_bi == 0){

    printf ("n Introduce un nombre para la biblioteca: ");
    fflush (stdin);
    fgets (bi[i].nombre_bi, N, stdin);
    cambio(bi[i].nombre_bi);

    bi[i].lleno_bi = 1;
    aux = 1;
    }
    }

    if (aux == 0){
    printf ("nn No queda ningun hueco libre para una nueva biblioteca.n");
    }
    }

    void anadelib (){

    int i, op, aux;
    aux = 0;

    for (i = 0; i < 3 && aux == 0; i++){
    if (bi[i].lleno_bi == 1){
    printf ("n (%i) %s.", i+1, bi[i].nombre_bi);
    }
    }
    printf ("nn Opcion: ");
    scanf ("%i",&op);

    for (i = 0; i < 10 && aux == 0; i++){

    if (bi[op].lib[i].lleno_lib == 0){

    printf ("n Introduce el nombre del libro: ");
    fflush (stdin);
    fgets (bi[op].lib[i].nombre_lib, N, stdin);
    cambio(bi[op].lib[i].nombre_lib);

    printf ("n Introduce el nombre del autor: ");
    fflush (stdin);
    fgets (bi[op].lib[i].autor, N, stdin);
    cambio(bi[op].lib[i].autor);

    bi[op].lib[i].lleno_lib = 1;
    aux = 1;
    }
    }
    }

    void consulta (){

    int i, j, op, aux;
    char buscar[N];

    aux = 1;

    do{
    printf (" Buscar: nn");
    printf (" (1) Nombre del Libron");
    printf (" (2) Nombre del Autorn");
    printf ("n Opcion: ");
    scanf ("%i",&op);
    }while (op < 1 || op > 2);

    switch (op){

    case 1: {
    printf ("n Introduce el nombre del libro: ");
    fflush (stdin);
    fgets (buscar, N, stdin);
    cambio(buscar);

    for (i = 0; i < 3 ; i++){
    aux == 1;
    for (j = 0; j < 10 ; j++){
    aux = strcmp (buscar, bi[i].lib[j].nombre_lib);
    if (aux == 0){
    printf ("nn El libro %s se encuentra en la biblioteca %s .n", buscar, bi[i].nombre_bi);
    printf (" El autor del libro es %s.nn",bi[i].lib[j].autor);
    }
    }

    }
    break;
    }

    case 2: {
    printf ("n Introduce el nombre del autor: ");
    fflush (stdin);
    fgets (buscar, N, stdin);
    cambio(buscar);

    for (i = 0; i < 3 ; i++){
    aux == 1;
    for (j = 0; j < 10 ; j++){
    aux = strcmp (buscar, bi[i].lib[j].autor);
    if (aux == 0){

    printf ("nn El libro del autor %s se llama %s n y esta en la biblioteca %s .n", buscar, bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
    }
    }

    }
    break;
    }
    }
    }

  14. En la función consulta, se define aux = 1 para que "no quede en cero" y así no entre al if del otro ciclo for, pero justo antes del if, aux esta definida como una comparación que devuelve (-1, 0 ó 1), de modo que no hacía falta definirla en el anterior ciclo for puesto que no va a quedar siempre en cero.

  15. Tengo una pregunta, por qué en la función añadelib solo introduces una variable ( i ) para recorrer las bibliotecas y los libros con los bucles for, y en la función consulta introduces dos variables ( i , j ), que es lo que yo creo que es lo correcto

  16. Ademas el codigo asi simple como esta no es eficiente por que diferencia entre mayusculas y minusculas. y al hacer una busqueda si escribimos el nombre del libro o el autor sin mayusculas no lo encuentra o viceversa (dependiendo de como esta guardado el libro). en el pdf que el dejo el esta una funcion que nos ayuda a solucionar eso :3 me lei todo el pdf y me lo acuerdo xD desde hace 4 cap

  17. Hola amigo, soy estudiante de ingenieria en sistemas y tengo una tarea muy parecida a este algoritmo, para mi seria de gran ayuda que me dijeras como puedo agregar el mismo libro en varias bibliotecas? cuando inserto el mismo libro en distintas bibliotecas al momento de buscar el libro me dice que no esta en la biblioteca. Gracias de ante mano

  18. Me da un error, no se cual es

    //Realizar un programa para controlar varias bibliotecas usando estructuras dentro de las estructuras.

    #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct {
    char nombre_lib[N];
    char autor[N];
    int lleno_lib;

    }libro;

    typedef struct {
    char nombre_bi[N];
    libro lib[10];
    int lleno_bi;
    }biblioteca;

    biblioteca bi[3];

    void vacio ();
    void cambio (char palabra[N]);
    void anadebi ();
    void anadelib ();

    int main (){
    int op;
    char key;

    vacio ();

    do {
    do{
    printf ("Elige una opcion a realizar: n");
    printf ("(1) Añadir una nueva biblioteca.n");
    printf ("(2) Añadir un libro a una biblioteca.n");
    printf ("(3) Consultar un libro.n");
    scanf ("%i",&op);
       }while (op < 1 || op > 3);
       
       switch (op) {
        case 1: {
        anadebi ();
        break;
        }
        case 2: {
        anadelib ();
        break;
        }
        case 3: {
        consulta ();
        break;
        }
       }
       printf ("Quieres realizar alguna operacion mas? (S/N): ");
       fflush (stdin);
       scanf ("%c",&key);
    }while (key == 's' || key == 's');

    system ("pause");
    return 0;
    }

    void vacio () {
    int i, j;
    for (i = 0; i < 3; i++) {
    bi[i].lleno_bi = 0;
    for (j = 0; j < 10; j++) {
    bi[i].lib[j].lleno_lib = 0;
    }
    }
    }

    void cambio (char palabra[N]) {
    int i;

    for (i = 0; i < N; i++) {
    if (palabra[i] == 'n') {
    palabra[i] = '';
    }
    }
    }

    void anadebi () {
    int i, aux;
    aux = 0;

    for (i = 0; i < 3 && aux == 0; i++) {
    if (bi[i].lleno_bi == 0) {
    printf ("Introduce un nombre para la biblioteca: ");
    fflush (stdin);
    fgets (bi[i].nombre_bi, N, stdin);
    cambio (bi[i].nombre_bi);

    bi[i].lleno_bo = 1;
    aux = 1;
    }
    }

    if (aux == 0) {
    printf ("No queda ningun hueco libre para nueva biblioteca.n");
    }
    }

    void anadelib () {
    int i, op, aux;
    aux = 0;

    for (i = 0; i < 3; i++) {
    if (bi[i].lleno_bi == 1) {
    printf ("(%i) %s.n",i, bi[i].nombre_bi);
    }
    }
    scanf ("%i",&op);

    for (i = 0; i < 10 && aux == 0; i++) {
    if (bi[op].lib[i].lleno_lib == 0) {
    printf ("Introduce el nombre del libro: ");
    fflush (stdin);
    fgets (bi[op].lib[i].nombre_lib, N, stdin);
    cambio (bi[op].lib[i].nombre_lib);

    printf ("Introduce el nombre del autor: ");
    fflush (stdin);
    fgets (bi[op].lib[i].autor, N, stdin);
    cambio (bi[op].lib[i].autor);

    bi[op].lib[i].lleno_lib = 1;
    aux = 1;
    }
    }
    }

    void consulta () {
    int op, i, j, aux;
    char buscar[N];

    aux = 1;

    do {
    printf ("Que quieres buscar, nombre libro o nombre autor: n");
    printf ("(1) Nombre Libro.n");
    printf ("(2) Nombre Autor.n");
    scanf ("%i",&op);
    }while (op < 1 || op > 2);

    switch (op) {
    case 1: {
    printf ("Introduce el nombre del Libro: ");
    fflush (stdin);
    fgets (buscar, N, stdin);
    cambio (buscar);

    for (i = 0; i < 3; i++) {
    aux = 1;
    for (j = 0; i < 10; j++) {
    aux = strcmp (buscar, bi[i).lib[j].nombre_lib);
    if (aux == 0) {
    printf ("El libro %s se encuentra en la biblioteca %s.n",buscar, bi[i].nombre_bi);
    printf ("El autor del libro es %s.n",bi[i].lib[j].autor);
    }
    }
    }
    break;
    }
    case 2: {
    printf ("Introduce el nombre del Libro: ");
    fflush (stdin);
    fgets (buscar, N, stdin);
    cambio (buscar);

    for (i = 0; i < 3; i++) {
    aux = 1;
    for (j = 0; i < 10; j++) {
    aux = strcmp (buscar, bi[i).lib[j].autor);
    if (aux == 0) {
    printf ("El libro %s se encuentra en la biblioteca %s.n",bi[i].lib[j].nombre_lib, bi[i].nombre_bi);
    printf ("El autor del libro es %s.n",bi[i].lib[j].autor);
    }
    }
    }
    break;
    }
    }
    }

  19. Hola, en primera medida queria agradecerte lo bien que explicas y la onda que le pones, segui asi. En segundo lugar va la consulta jeje. En el momento de comparar los array de string  discrimina la mayusculas de las minusculas; por ejemplo al cargar el nombre del libro El nombre del viento y luego buscamos el nombre del viento. no lo encuentra ¿hay manera de preever esto? o una solucion. Gracias.

  20. #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct{
      char nombre_lib[N];
      char autor[N];
      int lleno_lib;
    }libro;

    typedef struct{
      char nombre_bi[N];
      libro lib[10];
      int lleno_bi;
    }biblioteca;

    void vacio();
    void anadebib();
    void anadelib();
    void consulta();
    void cambio(char palabra[N]);

    biblioteca bi[3];

    int main(){
      int op;
      char key;

      vacio();

      do{
        do{
       
          printf("-—————————————————–n");
          printf("*********** BIENVENIDOS **********n");
          printf("-—————————————————–nn");

          printf("(1) Anadir una nueva biblioteca.n");
          printf("(2) Anadir un libro a una biblioteca.n");
          printf("(3) Consultar un libro.n");
          scanf("%d", &op);

        }while(op < 1 || op > 3);

        switch(op){
          case 1: anadebib(); break;
          case 2: anadelib(); break;
          case 3: consulta(); break;
        }

        printf("Desea hacer otra operacion?… (S/N)n");
        fflush(stdin);
        scanf("%c", &key);

      }while(key == 's' || key == 'S');

     
      system("pause");
      return 0;
    }

    void vacio(){
      int i, j;

      for(i = 0; i < 3; i++){
        bi[i].lleno_bi = 0;
        for(j = 0; j < 10; j++){
          bi[i].lib[j].lleno_lib = 0;
        }
      }
    }

    void anadebib(){
      int i, aux;

      aux = 0;

      for(i = 0; i < 3 && aux == 0; i++){
        if(bi[i].lleno_bi == 0){
          printf("Introduzca un nombre para la biblioteca.n");
          fflush(stdin);
          fgets(bi[i].nombre_bi, N, stdin);
          cambio(bi[i].nombre_bi);

         
          bi[i].lleno_bi = 1;
          aux = 1;
        }
      }if(aux == 0){
        printf("No queda ningun espacio libre.n");
      }
    }

    void anadelib(){
      int i, op, aux;
      aux = 0;

      for(i = 0; i < 3; i++){
        if(bi[i].lleno_bi == 1){
          printf("(%d) %s.n", i+1,bi[i].nombre_bi);
        }
      }scanf("%d", &op);

      for(i = 0; i < 10 && aux == 0; i++){
        if(bi[op].lib[i].lleno_lib == 0){

          printf("Introduzca el nombre del libro: ");
          fflush(stdin);
          fgets(bi[op].lib[i].nombre_lib, N, stdin);
          cambio(bi[op].lib[i].nombre_lib);

          printf("Introduzca el autor del libro: ");
          fflush(stdin);
          fgets(bi[op].lib[i].autor, N, stdin);
          cambio(bi[op].lib[i].autor);

          bi[op].lib[i].lleno_lib = 1;
          aux = 1;

       }
      }
    }

    void consulta(){

      int op, i, j, aux;
      char buscar[N];

      aux = 1;

      do{
        printf("-———————————n");
        printf("****** BUSCAR ******n");
        printf("-——————————–nn");

       
        printf("(1) Buscar nombre de libro.n");
        printf("(2) Buscar nombre de autor.n");
        scanf("%d", &op);

       }while(op < 1 || op > 2);

      switch(op){
       case 1:{

         printf("Introduzca el nombre del libro: ");
         fflush(stdin);
         fgets(buscar, N, stdin);
         cambio(buscar);

         for(i = 0; i < 3; i++){
           aux = 1;
           for(j = 0; j < 10; j++){
             aux = strcmp(buscar, bi[i].lib[j].nombre_lib);
             if(aux == 0){
             printf("El libro %s se encuentra en la biblioteca %s.n", buscar, bi[i].nombre_bi);
               printf("el autor del libro es %s.n", bi[i].lib[j].autor);
             }
           }
         }
         break;
       }

       case 2:{

          printf("Introduzca el nombre del autor: ");
          fflush(stdin);
          fgets(buscar, N, stdin);
          cambio(buscar);

       
          for(i = 0; i < 3; i++){
            aux = 1;
            for(j = 0; j < 10; j++){
               aux = strcmp(buscar, bi[i].lib[j].autor);
               if(aux == 0){
                printf("El libro %sn se encuentra en la biblioteca %s.n", bi[i].lib[j].nombre_lib, bi[i].nombre_bi);

               }
             }
           }
           break;
       }
      }
    }

    void cambio(char palabra[N]){
      int i; 

      for(i = 0; i < N; i++){
        if(palabra[i] == 'n'){
          palabra[i] = '';
        }
      }
    }

  21. hola compañero quiero darte las gracias por este curso desde que empece a programar con javascript y php soy esclavo de mi ordenador  XD en el curso 
    de desarrollo de aplicaciones que hice nos dieron una ligera intro de C y el profesor 
    afirmo que conprendiendo la logica y los conceptos basicos de programacion podriamos comprender cualquier lenguage de programacion buscando videos tutoriales o cursos como este que la verdad esta genial te as lucido me encanta C cuando acabe de ver tus videos practicare un tiempo y luego ire a por C++ para pasarme a java que es el que me interesa de verdad  El curso que hice estaba enfocado al desarrollo y diseño de paginas web ya saves HTML CSS etc.. y bueno 
    estoy haciendo una web pero la e detenido  para salir de el navegador y pulir mas la parte de la programacion.. e tenido un problemilla en este ejemplo (ejercisio) y es que no me muestra el nombre de la biblioteca en los resultados te paso el codigo aver si lo encuentras el compilador no me da errores y se ejecuta perfectamente todo lo demas anterior mente usaba geany en linux pero ya estoy en dev c++ por que tube un problemilla con el depurador de geany muchas gracias por todo un saludo.

  22. Buenas tardes, Emilio este curso me ha parecedio muy excelente, voy por este video y he aprovechado mucho las explicaciones, ya tenia algo de conocimiento en c pero esto me ha servido de mucho, he agregado algunas cosas a tu codigo y lo comprato para que me des tu opinion:

    //Realizar un programa para controlar varias bibliotecas usando estructuras dentro de estructuras

    #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct{ // Tipo estructura para crear un libro nuevo
    char nombrelib[N];
    char autorlib[N];
    int liblleno;
    }libros;

    typedef struct{ // Tipo estructura para crear una estructura nueva
    char nombrebib[N];
    libros libro[10];
    int bibllena;
    }biblioteca;

    biblioteca bib[3]; //Función para crear las bibliotecas, en este caso 3

    //Prototipos de las funciones
    void vacio();
    void cambio(char texto[N]);
    void agbiblioteca();
    void aglibro();
    void agrega(int cont);
    void consulta();

    //Función principal
    int main(){
    int op;
    char key;

    vacio();

    do{
    do{
    system("cls");
    printf("** ** ** **     Menu  Principal     ** ** **n");
    printf("**                                        **n");
    printf("**  1  Agregar una nueva biblioteca.      **n");
    printf("**  2  Agregar un libro a una biblioteca  **n");
    printf("**  3  Consultar un libro.                **n");
    printf("**                                        **n");
    printf("** ** ** **     Menu  Principal     ** ** **nn");
    printf("Que operacion desea realizar: ");
    scanf("%i",&op);

    }while(op < 1 || op > 3);

    switch(op){
    case 1:{
    agbiblioteca();
    break;
    }
    case 2:{
    aglibro();
    break;
    }
    case 3:{
    consulta();
    break;
    }
    }
    printf("nnQuieres realizar alguna operacion mas? (S/N): ");
    fflush(stdin);
    scanf("%c",&key);
    }while(key == 'S' || key == 's');

    return 0;
    }

    //Función para inicializar las bibliotecas y los libros en cada una de ellas
    void vacio(){
    int i,j;
    for (i = 0; i < 3; i++){
    bib[i].bibllena=0;
    for (j = 0; j < 10; j++){
    bib[i].libro[i].liblleno=0;
    }
    }
    }

    //Función para cambias los n por en los string ingresasdos por teclado y recogidas on fgets
    void cambio(char texto[N]){
    int i;
    for (i = 0; i < N; i++){
    if (texto[i] == 'n'){
    texto[i] = '';
    }
    }
    }

    //Función para agregar bibliotecas
    void agbiblioteca(){
    int i,aux;
    aux=0;
    for (i=0;i<3 && aux==0;i++){
    if (bib[i].bibllena==0){
    system("cls");
    printf("** ** Menu  para agregar una nueva Biblioteca  ** **nn");
    printf("Indica el nombre para la Biblioteca: ");
    fflush(stdin);
    fgets(bib[i].nombrebib,N,stdin);
    cambio(bib[i].nombrebib);
    bib[i].bibllena=1;
    aux=1;
    }
    }
    if (aux==0){
    printf("nnNo hay espacio para agregar una biblioteca nueva.n");
    }
    }

    //Función para agregar libros
    void aglibro(){
    int i,cont;

    //Se verifica si hay bibliotecas creadas previamente
    cont=0;
    for (i=0;i<3;i++){
    if (bib[i].bibllena==1){
    cont+=1;
    }
    }
    if (cont>0){//Si hay bibliotecas creadas llamamos a una nueva función oara agregar un libro en ella (s)
    agrega(cont);
    }else
    {
    printf("No existen Bibliotecas registradas.nn");
    }
    }

    //Función para agregar libros si existen bibliotecas creadas
    void agrega(int cont){

    int i,op,aux;

    aux=0;
    do{
    system("cls");
    printf("** ** Menu  para agregar un nuevo libro  ** **nn");
    for (i=0;i<cont;i++){
    printf("%i agregar a biblioteca %s.n",i+1,bib[i].nombrebib);
    }

    printf("nnEn que biblioeta deseas agregar el nuevo libro: ");
    scanf("%i",&op);
    }while(op<0 || op >cont);

    for (i=0;i<2 && aux==0;i++){
    if (bib[op-1].libro[i].liblleno==0){
    printf("Ingrese el Nombre del Libro: ");
    fflush(stdin);
    fgets(bib[op-1].libro[i].nombrelib,N,stdin);
    cambio(bib[op-1].libro[i].nombrelib);

    printf("Ingrese el Nombre del autor: ");
    fflush(stdin);
    fgets(bib[op-1].libro[i].autorlib,N,stdin);
    cambio(bib[op-1].libro[i].autorlib);

    bib[op-1].libro[i].liblleno=1;
    aux =1;
    }
    }
    if (aux==0){
    printf("nnNo hay espacio para agregar una libro nuevo a esta biblioteca.n");
    }

    }

    //Función para consultar unlbro, por nombre o por autor
    void consulta(){

    int op,i,j,aux,cont;
    char texto[N];

    //Verifica si al menos exise un libro registrado en alguna biblioteca
    for (i=0;i<3;i++){
    for (j=0;j<2;j++){
    if(bib[i].libro[j].liblleno==1){
    cont+=1;
    }
    }
    }
    //Si existen al menos un libro en una biblioteca se consulta por nobre o por autor
    if(cont>0){
    do{
    system("cls");
    printf("** ** Menu  para consultar un libro  ** **nn");
    printf("1 Buscar por nombre del libron");
    printf("2 Buscar por autor del libron");
    printf("nSeleccione una opcion: ");
    scanf("%i",&op);
    }while(op<1 || op>2);

    switch(op){
    case 1:{
    //Consulta del libro por nombre
    printf("nNombre del libro a consultar: ");
    fflush(stdin);
    fgets(texto,N,stdin);
    cambio(texto);
    cont=0;
    for (i=0;i<3;i++){
    aux=1;
    for (j=0;j<2  && cont ==0;j++){
    aux = strcmp(texto,bib[i].libro[j].nombrelib);
    if(aux==0){
    printf("nEl libro %s se encuentra en la biblioteca: %sn",texto,bib[i].nombrebib);
    printf("El nombre del autor del libro es: %sn",bib[i].libro[j].autorlib);
    cont=1;
    }
    }
    }
    if (cont==0){
    printf("nEl libro consultado no esta registrado en ninguna biblioteca.n");
    }

    break;
    }
    case 2:{
    //Consulta del libro por autor
    printf("nNombre del autor del libro a consultar: ");
    fflush(stdin);
    fgets(texto,N,stdin);
    cambio(texto);
    cont=0;
    for (i=0;i<3;i++){
    aux=1;
    for (j=0;j<2  && cont ==0;j++){
    aux = strcmp(texto,bib[i].libro[j].autorlib);
    if(aux==0){
    printf("nEl libro escrito por %s se encuentra en la biblioteca: %sn",texto,bib[i].nombrebib);
    printf("El nombre del autor del libro es: %sn",bib[i].libro[j].nombrelib);
    cont=1;
    }
    }
    }
    if (cont==0){
    printf("nEn ninguna de las bibliotecas se encuentran libros del autor consultado.n");
    }

    break;
    }
    }
    }else{
    printf("No existen libros registrados en las bibliotecas.n");
    }

    }

  23. Hola, Emilio, te resultará muy tostón si te envió todo mi código? Le he dado mil vueltas, y no consigo ver el error… Al compilar, y poner el número 1, por ejemplo, me sale "Quieres realizar alguna operacion mas? (S/N)", pero tecleando 2 y 3, también falla. Ayuda! 🙁

    //Realizar un programa para controlar varias bibliotecas usando estructuras dentro de estructuras
    #include <stdio.h>
    #include <string.h>
    #define N 50

    typedef struct {
        char nombre_lib[N];
        char autor [N];
        int lleno_lib;
    }libro;

    typedef struct{
        char nombre_bi[N];
        libro lib[10];
        int lleno_bi;
    }biblioteca;

    biblioteca bi [3];

    void vacio();
    void cambio (char palabra [N]);
    void anadebi();
    void anadelib();
    void consulta();

    int main (){
        int op;
        char key;

        vacio();

        do{
            do{
                printf("Elige una opcion a realizar:n");
                printf("(1) Anadir una nueva biblioteca.n");
                printf("(2) Anadir un libro a una biblioteca.n");
                printf("(3) Consultar un libro.n");
                scanf("%i", &op);
            }while(op<1 ||op>3);

            switch(op){
                case 1:{
                    anadebi();
                    break;}
                case 2:{
                    anadelib();
                    break;}
                case 3:{
                    consulta();
                    break;
                    }
            }
            printf("n-———-n");
            printf("Quieres realizar alguna operacion mas? (S/N): n");
            fflush(stdin);
            scanf("%c", &key);
        }while (key == 'S' || key == 's');

        system("pause");
        return 0;
    }
    void vacio(){
        int i, j;
        for(i=0; i<3; i++){
           bi[i].lleno_bi = 0;
           for(j=0;j<10;j++){
                bi[i].lib[j].lleno_lib = 0;
           }
        }
    }
    void cambio (char palabra[N]){
        int i;

        for(i=0;i<N; i++) {
            if(palabra[i] == 'n'){
                palabra[i] = '';
            }
        }
    }
    void anadebi(){
        int i, aux;
        aux=0;
        for(i=0; i<3 && aux == 0; i++){
            if(bi[i].lleno_bi = 0){
                printf("Introduce un nombre para la biblioteca: ");
                fflush(stdin);
                fgets(bi[i].nombre_bi, N, stdin);
                cambio(bi[i].nombre_bi);

                bi[i].lleno_bi = 1;
                aux=1;
            }

        }

        if(aux==0){
            printf("No queda ningun hueco libre para una nueva bibliotecan");
        }
    }
    void anadelib(){
       int i, op, aux;
       aux=0;

       for(i=0; i<3; i++){
            if(bi[i].lleno_bi == 1){
                printf("(%i) %sn", i, bi[i].nombre_bi);

            }
        }
        scanf("%i", &op);

        for(i=0; i<10 && aux == 0;i++){
            if(bi[op].lib[i].lleno_lib == 0){
                printf("Introduce el nombre del libro: ");
                fflush(stdin);
                fgets(bi[op].lib[i].nombre_lib, N, stdin);
                cambio(bi[op].lib[i].nombre_lib);

                printf("Introduce el nombre del autor: ");
                fflush(stdin);
                fgets(bi[op].lib[i].autor, N, stdin);
                cambio(bi[op].lib[i].autor);

                bi[op].lib[i].lleno_lib = 1;
                aux=1;
        }

    }

    }
    void consulta(){
        int op, i, j, aux;
        char buscar[N];

        aux=1;

        do{
            printf("Que quieres buscar, nombre libro o nombre autor?n");
            printf("(1) Nombre libron");
            printf("(2) Nombre autorn");
            scanf("%i", &op);
        }while (op<1 || op>2);

        switch(op){
            case 1: {
                printf("Introduce el nombre del libro: ");
                fflush(stdin);
                fgets(buscar, N, stdin);
                cambio(buscar);
                for(i=0; i<3; i++){
                    aux=1;
                    for(j=0;j<10;j++){
                        aux= strcmp(buscar,bi[i].lib[j].nombre_lib);
                        if(aux==0){
                            printf("El libro %s se encuentra en la biblioteca %s.n", buscar, bi[i].nombre_bi);
                            printf("El autor del libro es %s. n", bi[i].lib[j].autor);
                        }
                    }

                }
                break;
            }
            case 2: {
                printf("Introduce el nombre del autor: ");
                fflush(stdin);
                fgets(buscar, N, stdin);
                cambio(buscar);

                for(i=0; i<3; i++){
                    aux=1;
                    for(j=0;j<10;j++){
                        aux= strcmp(buscar,bi[i].lib[j].autor);
                        if(aux==0){
                            printf("El libro %s se encuentra en la biblioteca %s.n", bi[i].lib[j].nombre_lib,bi[i].nombre_bi);

                        }
                    }

                }
                break;
            }
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here