Hola.
He hecho este código:
Código C:
Ver original/*Una agenda que maneje los siguientes datos: nombre, dirección, tlf móvil, email, y día,
mes y año de nacimiento (estos tres últimos datos deberán ser números enteros
cortos). Deberá tener capacidad para 100 fichas. Se deberá poder añadir un dato
nuevo, visualizar los nombres de las fichas existentes, o mostrar todos los datos de una
persona (se preguntará al usuario cual es el nombre de esa persona que quiere
visualizar). Al empezar el programa, leerá los datos de un fichero llamado “agenda.dat”
(si existe). Al terminar, guardará todos los datos en ese fichero.*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
struct
{
char nombre[10];
char direccion[15];
int movil;
char email[20];
short int dia, mes, ano;
}datos[100];
char lineas[500],comprobar[10];
FILE* fichero;
int opcion,posicion,tamano,i,j,aux;
fichero
= fopen("agenda.dat", "r+b"); if(fichero != NULL)
{
while(! feof(fichero
)) //Leemos los datos que contiene al principio {
fgets(lineas
,25,fichero
); }
/*posicion actual*/
posicion
= ftell(fichero
);
/* final del fichero */
fseek(fichero
,0,SEEK_END
);
/* total de lineas */
fseek(fichero
,posicion
,SEEK_SET
);
i = tamano / sizeof(datos);
do
{
do
{
printf("1. Introducir datos\n"); printf("2. Visualizar nombres de las fichas existentes\n"); printf("3. Mostrar todos los datos de una persona\n");
switch(opcion)
{
case 1:
printf("Introduce un nombre: "); fgets(datos
[10].
nombre, 10, stdin
);
printf("Introduce una direccion: "); fgets(datos
[i
].
direccion, 8, stdin
); printf("Introduce un movil: "); scanf("%d",&datos
[i
].
movil); printf("Introduce correo electronico: "); fgets(datos
[i
].
email, 50, stdin
); printf("Introduce dia de nacimiento: "); scanf("%d",&datos
[i
].
dia); printf("Introduce mes de nacimiento: "); scanf("%d",&datos
[i
].
mes); printf("Introduce ano de nacimiento: "); scanf("%d",&datos
[i
].
ano); i++;
break;
case 2:
for(j=0;j<=i;j++)
{
}
break;
case 3:
printf("Introduce el nombre de la persona de la que desea visualizar los datos:"); fgets(comprobar
, 10, stdin
);
for(j=0;j<=i;j++)
{
if(strcmp(datos
[j
].
nombre,comprobar
)==0) {
printf("Nombre: %s\n",datos
[j
].
nombre); printf("Direccion: %s\n",datos
[j
].
direccion); printf("Movil: %d\n",datos
[j
].
movil); printf("Email: %s\n",datos
[j
].
email); printf("Dia de nacimiento: %d\n",datos
[j
].
dia); printf("Mes de nacimiento: %d\n",datos
[j
].
mes); printf("Ano de nacimiento: %d\n",datos
[j
].
ano); }
}
break;
case 4:
break;
default:
printf("Opcion no valida!\n"); }
}while(opcion<1||opcion>4);
}while(opcion!=4);
}
aux=i;
for(i=0;i<=aux;i++)
{
fprintf(fichero
, "%s\n", datos
[i
].
nombre); fprintf(fichero
, "%s\n", datos
[i
].
direccion); fprintf(fichero
, "%d\n", datos
[i
].
movil); fprintf(fichero
, "%s\n", datos
[i
].
email); fprintf(fichero
, "%d\n", datos
[i
].
dia); fprintf(fichero
, "%d\n", datos
[i
].
mes); fprintf(fichero
, "%d\n", datos
[i
].
ano); }
printf("\n\nPulse una tecla para continuar"); return 0;
}
El problema es en el switch, en el case 1.
Ahí lo que quiero hacer es pedir los datos. Pues, al compilar, en la consola, elijo la opción 1. Directamente me sale "Introduce un nombre: Introduce una direccion: ". Y ahí se detiene para que introduzca la dirección.
¿Qué puedo hacer para que pare en "Introduzca un nombre"?
También me gustaría saber si os parece que el problema está bien planteado, y que si una vez solucionado el error que os acabo de exponer funcionará el programa adecuadamente, o falta algo por hacer.
Gracias.
Saludos.