Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Agosto 21, 2008, 09:45:26
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: dudas de scanf y archivos en c 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: dudas de scanf y archivos en c  (Leído 330 veces)
fkorleone
Recien Llegado
*
Desconectado Desconectado

Mensajes: 3


Ver Perfil Email
« en: Octubre 05, 2006, 08:26:31 »

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

void menu();
void agregarLibro();
FILE *libros,*autores;
int main(int argc, char *argv[])
{
  menu();
  system("PAUSE");   
  return 0;
}

void menu()
{ int op;

  do{ 
  //clrscr(); 
  printf( "\t\t\t MENU\n\n" );
  printf( "\t\t1. Buscar libro por ISBN\n" );
  printf( "\t\t2. Buscar libros por autor o titulo\n" );
  printf( "\t\t3. Agregar un nuevo libro\n" );
  printf( "\t\t4. Exit\n" );
  printf( "\t\tSeleccion --> " );
  scanf( "%d", &op );
   
 
   
    switch ( op ) {
        case 1:            /* Note the colon, not a semicolon */
            //playgame();
            break;
        case 2:         
            //loadgame();
            break;
        case 3:         
            agregarLibro();
            break;
        case 4:       
            printf( "Gracias por usar nuestro servicio de Biblioteca!\n" );
            break;
        default:           
            printf( "\tEsta opcion no es valida!\n" );
            break;
    }
  }while( op != 4 );
}
//agrega los datos al final del archivo
void agregarLibro()
{
  char titulo[40],autor[20],num[10],sino;
  int stop;
  libros=fopen("libros.txt", "a");   // abre el archivo libros para escribirlo
  autores=fopen("autores.txt", "a"); // abre el archivo autores para escribirlo
 
  do{
  stop=1;     
  printf( "Ingresar datos del libro: \n" );

//esta es mi duda kero verificar k el kodigo sea de diez digitos no menos ni mas
//uso gets pero no se k seria mejor scanf o gets 
  printf( "\tCodigo ISBN: " );
  fflush(stdin);
  gets(num);
 
   
****** aka uso gets pork al usar scanf ingreso el dato por ejemplo
***** el libro:  las guerras del mundo kon scanf solo agarra las y los demas se ******pierde enkambio kon gets lo agarro todo.

  printf( "\tTitulo: " );
  fflush(stdin);
  gets(titulo);
  printf( "\tAutor con el formato (Apellido, Nombre): " );
  fflush(stdin);
  gets(autor);
 
  // escribe los datos ingresados al archivo libros
  fprintf(libros, "%s" , num); 
  fprintf(libros, " " );
  fprintf(libros, "%s" , titulo);
  fprintf(libros, "\n");
 
 
  // escribe los datos ingresados al archivo autores
  fprintf(autores, "%s" , autor);
  fprintf(autores, ": " );
  fprintf(autores, "%s" , num);
  fprintf(autores, "\n");
 
  printf( "Desea ingresar otro autor (s/N): " );
  scanf("%c",&sino);
  fflush(stdin);
 
    if( (sino == 's') || (sino == 'S') ) // ver si quiere ingresar mas datos
   {
     stop=0;
       
   }
   
   }while( stop == 0);     
   fclose(libros);   // cierra el archivo libros
   fclose(autores);  // cierra el archivo autores
}

bueno el resto aun no lo hago k es buscar palabras y kodigos en los archivos de texto si alguien tiene algo asi no seria malo k lo postiara
En línea
stlogan
Miembro
*****
Desconectado Desconectado

Mensajes: 22


Naxter


Ver Perfil Email
« Respuesta #1 en: Octubre 07, 2006, 12:57:08 »

============================================
int variable;

variable=strlen(num); <--- strlen te devuelve la longitud de las cadenas.


Si variable es menor a 10 que lo guarde

Si no, que lo vuelva a pedir o muestre un error
============================================
gets esta bien para capturar.





  printf( "Ingresar datos del libro: \n" );
   
  printf( "\tCodigo ISBN: " );
  gets(num);

  fflush(stdin); <--- no creo que ocupes tantos de estos, si acaso uno, creo yo, aunke lo dudo, no me acuerdo mucho pero ke yo sepa se pone despues de capturar una cadena y despues un entero.. aunke yo usaba  flushall();
  printf( "\tTitulo: " );
  gets(titulo);
  printf( "\tAutor con el formato (Apellido, Nombre): " );
  gets(autor)





porque tienes tantos fflush(stdin);Huh

En línea

Kira & Eva :D
Habitual
*****
Desconectado Desconectado

Mensajes: 288


Senior Programmer


Ver Perfil Email
« Respuesta #2 en: Octubre 07, 2006, 06:40:12 »

« Última modificación: Octubre 07, 2006, 06:53:02 por Baby Girl » En línea
stlogan
Miembro
*****
Desconectado Desconectado

Mensajes: 22


Naxter


Ver Perfil Email
« Respuesta #3 en: Octubre 10, 2006, 10:36:35 »

 Roll Eyes Roll Eyes

fflush(stdin);

fflush es una funcion que limpia o vacia el buffer de entrada, cuando introducimos datos por teclado estos se almacenan en un buffer llamado stdin ( standard input )
asi que debemos limpiar el buffer para evitar errores mas adelante con scanf al leer el dato

error = scanf("%d",&numero);

mas...
En línea

Kira & Eva :D
Habitual
*****
Desconectado Desconectado

Mensajes: 288


Senior Programmer


Ver Perfil Email
« Respuesta #4 en: Octubre 10, 2006, 03:13:45 »

En línea
stlogan
Miembro
*****
Desconectado Desconectado

Mensajes: 22


Naxter


Ver Perfil Email
« Respuesta #5 en: Octubre 10, 2006, 11:23:40 »

En línea

Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: dudas de scanf y archivos en c « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC