elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Duda con fread en: 9 Agosto 2010, 21:30 pm
Buenas. Antes que nada, el codigo:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main(){
  6. struct{
  7. char nombre[50];
  8. char direccion[100];
  9. char movil[10];
  10. char email[100];
  11. short int nDia;
  12. short int nMes;
  13. short int nAno;
  14. }persona;
  15. int i;
  16. int opcion=1; //Opcion elegida por le usuario
  17. char textoTemporal[40];
  18. FILE *fichero;
  19.  
  20. while(opcion != 0){
  21. printf("1.- A%cadir ficha nueva\n\n",164);
  22. printf("2.- Visualizar nombres de fichas existentes\n\n");
  23. printf("3.- Buscar por nombre\n\n");
  24. printf("Teclee su opcion: ");
  25. gets(textoTemporal);
  26. sscanf(textoTemporal,"%d",&opcion);
  27.  
  28. switch(opcion){
  29. case 1:
  30. fichero=fopen("gente.dat","ab");
  31. printf("Nombre: ");
  32. gets(persona.nombre);
  33. printf("Direccion: ");
  34. gets(persona.direccion);
  35. printf("Telefono movil: ");
  36. gets(persona.movil);
  37. printf("Email: ");
  38. gets(persona.email);
  39. printf("Dia de nacimiento: ");
  40. gets(textoTemporal);
  41. sscanf(textoTemporal,"%d",&persona.nDia);
  42. printf("Mes de nacimiento: ");
  43. gets(textoTemporal);
  44. sscanf(textoTemporal,"%d",&persona.nMes);
  45. printf("Año de nacimiento: ");
  46. gets(textoTemporal);
  47. sscanf(textoTemporal,"%d",&persona.nAno);
  48. fwrite(&persona,1,sizeof(persona),fichero);
  49. fclose(fichero);
  50. system("cls");
  51. break;
  52. case 2:
  53. fichero=fopen("gente.dat","rb");
  54. while(feof(fichero) == 0){
  55. fread(&persona,1,sizeof(persona),fichero);
  56. puts(persona.nombre);
  57. }
  58. fclose(fichero);
  59. break;
  60.  
  61. case 3:
  62. printf("Introduzca el nombre de la persona: ");
  63. gets(textoTemporal);
  64. fichero=fopen("gente.dat","rb");
  65. fread(persona.nombre,1,sizeof(persona.nombre),fichero);
  66. fread(persona.direccion,1,sizeof(persona.direccion),fichero);
  67. fread(persona.movil,1,sizeof(persona.movil),fichero);
  68. fread(persona.email,1,sizeof(persona.email),fichero);
  69. fread(&persona.nDia,sizeof(persona.nDia),1,fichero);
  70. fread(&persona.nMes,sizeof(persona.nMes),1,fichero);
  71. fread(&persona.nAno,sizeof(persona.nAno),1,fichero);
  72. if((strcmp(persona.nombre,textoTemporal)== 0)){
  73. printf("Nombre: ");
  74. puts(persona.nombre);
  75. printf("Direccion: ");
  76. puts(persona.direccion);
  77. printf("Movil: ");
  78. puts(persona.movil);
  79. printf("email: \n");
  80. puts(persona.email);
  81. printf("Dia de nacimiento: %d\n",persona.nDia);
  82. printf("Mes de nacimiento: %d\n",persona.nMes);
  83. printf("A%co de nacimiento: %d\n",164,persona.nAno);
  84. }
  85. fclose(fichero);
  86. }3
  87. }
  88. return 0;
  89. }
  90.  
El problema es el siguiente: Cuando escojo la opcion 2, se deben mostrar todos los nombres de las fichas guardadas. Pero el ultimo nombre siempre se repite y se imprime en pantalla dos veces. Alguien sane a que se debe????
pd: La opcion 3 no esta mal, aun no la he modificado
GRACIAS!!
2  Programación / Programación C/C++ / ayuda fread en: 29 Julio 2010, 20:38 pm
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(){
struct{
char nombre[50];
char direccion[100];
char movil[10];
char email[100];
short int nDia;
short int nMes;
short int nAno;
}persona[100];
int i;
int numeroFicha=0;
int opcion=1;
char textoTemporal[40];
FILE *fichero;

printf("1.- A%adir ficha nueva\n\n",164);
printf("2.- Visualizar nombres de fichas existentes\n\n");
printf("3.- Buscar por nombre\n\n");

while(opcion != 0){
printf("Teclee su opcion: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&opcion);

switch(opcion){
case 1:
if(numeroFicha<100){
fichero=fopen("gente.dat","ab");
printf("Nombre: ");
gets(persona[numeroFicha].nombre);
printf("Direccion: ");
gets(persona[numeroFicha].direccion);
printf("Telefono movil: ");
gets(persona[numeroFicha].movil);
printf("Email: ");
gets(persona[numeroFicha].email);
printf("Dia de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona[numeroFicha].nDia);
printf("Mes de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona[numeroFicha].nMes);
printf("Año de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona[numeroFicha].nAno);
fwrite(persona[numeroFicha].nombre,1,sizeof(persona[numeroFicha].nombre),fichero);
fwrite(persona[numeroFicha].direccion,1,sizeof(persona[numeroFicha].direccion),fichero);
fwrite(persona[numeroFicha].movil,1,sizeof(persona[numeroFicha].movil),fichero);
fwrite(persona[numeroFicha].email,1,sizeof(persona[numeroFicha].email),fichero);
fwrite(&persona[numeroFicha].nDia,sizeof(persona[numeroFicha].nDia),1,fichero);
fwrite(&persona[numeroFicha].nMes,sizeof(persona[numeroFicha].nMes),1,fichero);
fwrite(&persona[numeroFicha].nAno,sizeof(persona[numeroFicha].nAno),1,fichero);
numeroFicha++;
fclose(fichero);
}
else{
printf("Limite de fichas alcanzado");
}
break;
case 2:
fichero=fopen("gente.dat","rb");
for(i=0;i<numeroFicha;i++){
fread(persona[i].nombre,1,sizeof(persona[i].nombre),fichero);
puts(persona[i].nombre);
fread(persona[i].direccion,1,sizeof(persona[i].direccion),fichero);
fread(persona[i].movil,1,sizeof(persona[i].movil),fichero);
fread(persona[i].email,1,sizeof(persona[i].email),fichero);
fread(&persona[i].nDia,sizeof(persona[i].nDia),1,fichero);
fread(&persona[i].nMes,sizeof(persona[i].nMes),1,fichero);
fread(&persona[i].nAno,sizeof(persona[i].nAno),1,fichero);
}
fclose(fichero);
break;
}
}
}

Alguien sabe por que no se muestran los nombres de las fichas por pantalla cuando escojo la 2ª opcion???
gracias
3  Programación / Programación C/C++ / Ejercicio C manejo de ficheros en: 25 Julio 2010, 15:32 pm
A ver si me podeis echar una mano con el siguiente ejercicio:

Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia. Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”. Cerrar el fichero, volverlo a abrir para lectura y mostrar los datos que se habían guardado.

El problema viene cuando abro el fichero en modo lectura e intento leer la variable edad. No se muy bien como usar fscanf para guardar la variable edad. A ve si m podeis ayudar

Gracias
4  Programación / Programación C/C++ / Manejo de ficheros en: 18 Julio 2010, 01:35 am
Antes de nada, el codigo del progrma:

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

main(){
   struct{
      char nombre[40];
      int edad;
      char lugarResidencia[100];   
   }persona;
   FILE *fichero;
   char linea[80];
   
   printf("Introduzca nombre: ");
   gets(persona.nombre);
   printf("Introduzca edad: ");
   scanf("%d",&persona.edad);
   getchar();
   printf("Lugar de residencia: ");
   gets(persona.lugarResidencia);

   
   fichero=fopen("gente.dat","w");
   fputs(persona.nombre,fichero);
   fputs(persona.lugarResidencia,fichero);
   fprintf(fichero,"%d",&persona.edad);
   fclose(fichero);
   
   fichero=fopen("gente.dat","r");
   fgets(linea,strlen(persona.nombre)+1,fichero);
   printf("Se llama: ");
   puts(linea);
   fscanf(fichero,"%d",&persona.edad);
   printf("Tiene %d años",persona.edad);
   fgets(linea,strlen(persona.lugarResidencia)+1,fichero);
   printf("\nVive en: ");
   puts(linea);
   system("PAUSE");
   fclose(fichero);
}

El programa funciona perfecto, pero cuando abro el fichero, la variable edad del struct no la guarda bien, y se inventa el valor. ¿Alguien sabe cual puede ser el fallo?
Gracias
5  Programación / Programación C/C++ / fprintf y fputs en: 16 Julio 2010, 10:49 am
Hola a todos. Mi duda es la siguiente:
Que diferencia hay entre fputs y fprintf??
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines