Ver Mensaje Individual
  #3 (permalink)  
Antiguo 09/03/2009, 12:58
Avatar de neandertal
neandertal
 
Fecha de Ingreso: enero-2008
Ubicación: Barcelona
Mensajes: 79
Antigüedad: 17 años
Puntos: 1
Respuesta: gets no recoge caracteres

He hecho las modificaciones que me comentas, y ahora espera a que introduzca los datos correctamente, pero me he encontrado que por alguna razón los datos no se recogen bien, y las variables de la estructura aparecen vacios, copio el ódigo entero por si el error está en algún otra parte.

Código:
#include <stdio.h>
#include <string.h>
#include <windows.h>

//Declaracion de prototipo
void recoge_datos(void);
void error(int e);
void intro(void);
void vuelca_datos(void);

//Variables globales
FILE* origen;
struct usuarios{
    char usuario[20];
    char contra[20];
}usuarios[10];
 int i=0;

int main(){
    char conf=0;
    origen=fopen("data.db","r");
    if(!origen)error(1);
    while(!feof(origen)){
        conf=fgetc(origen);
        if(conf=='-'){
            fgetc(origen);
            recoge_datos();
            i++;
            }
        }
    intro();
    vuelca_datos();
    if(fclose(origen))error(2);
}

void recoge_datos(void){
    int x=0;
    fgets(usuarios[i].usuario,20,origen);
    puts(usuarios[i].usuario);
    fgets(usuarios[i].contra,20,origen);
    puts(usuarios[i].contra);
}

void error(int e){
    switch(e){
        case 1:printf("Error abriendo el archivo 'data.db'\n");break;
        case 2:printf("Error cerrando el archivo 'data.db'\n");break;
        case 3:printf("Error abriendo el archivo 'salida.db'\n");break;
        case 4:printf("Error cerrando el archivo 'salida.db'\n");break;
    }
}

void intro(){
    char a;
    int mas=1;
    printf("Deseas introducir algun usuario mas ?(s/n): ");
    scanf("%c",&a);
    getchar();
    if(a=='s' || a=='S'){
        while(mas==1){
            i++;
            printf("\n");
            printf("Introduzca el nombre de usuario: ");
            gets(usuarios[i].usuario);
            printf("Introduzca el nombre de autor: ");
            gets(usuarios[i].contra);
            printf("\nDesea introducir mas usuarios?(0-no,1-si) ");
            scanf("%d",&mas);
            getchar();
            }
        }
}

void vuelca_datos(){
    int cont;
    FILE* destino;
    destino=fopen("salida.db","w");
    if(!destino)error(3);
    for(cont=0; cont<i; cont++){
        fputc('-',destino);
        fputc('\n',destino);
        fputs(usuarios[cont].usuario,destino);
        fputs(usuarios[cont].contra,destino);
        puts(usuarios[cont].usuario);
        puts(usuarios[cont].contra);
        printf("\n%d\n\n",cont);
    }
    if(fclose(destino))error(4);
}