Dudas con C

Hola, mirad tengo el siguiente problema en C, estoy haciendo un programa para el orden de una estanteria, todo va bien pero no me guarda los datos y no me sale ningun error, decir tambien que si hago el mismo proceso (el de guardar) en otro archivo si funciona, aqui teneis el codigo:

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

#define  LIBROS   50
#define  DVDS     50

struct libro {
       char titulo[50];
       char descripcion[500];
       char posicion[50];
       };

struct dvd {
       char titulo[50];
       char descripcion[500];
       char posicion[50];
       };

struct estanteria {   
       struct libro libro;
       struct dvd dvd;
       };


void guardar(int dvdolibro, struct estanteria estanteria)
{
FILE *archivo;
char datos[333];

if (dvdolibro == 1)
{
sprintf (datos, "%s || %s || %s\n", estanteria.dvd.titulo, estanteria.dvd.descripcion, estanteria.dvd.posicion);
}
else
{
sprintf (datos, "%s || %s || %s\n", estanteria.libro.titulo, estanteria.libro.descripcion, estanteria.libro.posicion);
}
archivo = fopen("datos.txt","a");
if ( archivo == NULL )
   {
   printf("No se puede abrir el archivo");
   }
fputs(datos, archivo);
if (fclose(archivo)!=0)
   {
   printf( "Problemas al cerrar el archivo\n" );
   }
}


void dvd_libro(int dvdolibro)
{
int i;
int siono;
struct estanteria estanteria;

for( i = 0; i<DVDS; i++)
               {
               getchar();
               gotoxy( 24, 1);
               printf("Inserte el titulo:\n");
               fflush( stdout );
               gotoxy( 24, 3);
               if ( dvdolibro == 1)
               {
               gets( estanteria.dvd.titulo );
               }
               else
               {
               gets( estanteria.libro.titulo );
               }
               clrscr();
               gotoxy( 24, 1);
               printf("Inserta la descripcion:\n");
               fflush( stdout );
               gotoxy( 24, 3);
               if ( dvdolibro == 1)
               {
               gets( estanteria.dvd.descripcion );
               }
               else
               {
               gets( estanteria.libro.descripcion );
               }
               clrscr();
               gotoxy( 24, 1);
               printf("Inserta la posicion en la estanteria:\n");
               fflush( stdout );
               gotoxy( 24, 3);
               if ( dvdolibro == 1)
               {
               gets( estanteria.dvd.posicion );
               }
               else
               {
               gets( estanteria.libro.posicion );
               }
               clrscr();
               gotoxy( 32, 1);
               printf("Resultado\n");
               fflush( stdout );
               gotoxy( 15, 3);
               if ( dvdolibro == 1)
               {
               printf("Titulo: %s\n", estanteria.dvd.titulo);
               }
               else
               {
               printf("Titulo: %s\n", estanteria.libro.titulo);
               }
               fflush( stdout );
               gotoxy( 15, 5);
               if ( dvdolibro == 1)
               {
               printf("Descripcion: %s\n", estanteria.dvd.descripcion);
               }
               else
               {
               printf("Descripcion: %s\n", estanteria.libro.descripcion);
               }
               fflush( stdout );
               gotoxy( 15, 7);
               if ( dvdolibro == 1)
               {
               printf("Posicion: %s\n", estanteria.dvd.posicion);
               }
               else
               {
               printf("Posicion: %s\n", estanteria.libro.posicion);
               }
               fflush( stdout );
               getchar();
               clrscr();
               gotoxy( 26, 1);
               printf("¿Deseas guardarlo?\n");
               gotoxy( 23, 3);
               printf("1----Si        2----No\n");
               gotoxy( 33, 5);
               scanf( "i%", &siono );
               clrscr();
               if( siono == 1 )
               {
               guardar(dvdolibro, estanteria);
               }
               }
              }

int main()
     {
     int opcion;
     int dvdolibro;
     int i;
     int siono;
         
     gotoxy( 20, 1);
     printf("Por favor introduzca una opcion:\n\n");
     gotoxy( 15, 3);
     printf("1----Insertar Unidades        2----Ver Unidades\n");
     gotoxy( 37, 5);
     scanf( "%i", &opcion);
     clrscr();
     if ( opcion == 1)
        {
        gotoxy( 20, 1);
        printf("Por favor introduzca una opcion:\n\n");
        gotoxy( 24, 3);
        printf("1----DVD        2----Libro\n");
        gotoxy( 35, 5);
        scanf( "%i", &dvdolibro);
        clrscr();
        dvd_libro(dvdolibro);
        }
}

[i]*Compilado en Dev-C++ 4.9.9.2[/i]
0 respuestas