09/03/2009, 12:58
|
| | | 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);
}
|