Hola a todos.
Estoy haciendo dos programas y por más que intento no consigo que me funcionen del todo como yo quiero. Ya tengo la mente tan enredada que no se que hacer. (Pongo sólo el SEGUNDO programa en este post porques si no se va a hacer muy grande)
En este caso el programa es de ficheros. Tengo un problema con una variable globa y es que no la reconoce o no se. Se trata de la ParteD(). El resto del programa funciona. Pero al seleccionar en el menu el numero 6, no hace nada, sólo devuelve el menu para hacer otra selección. Espero que alguien pueda encontrar el error y como corregirlo. El código es:
/*Escribir un programa en C que a partir de un fichero dado con el formato adecuado:
a) Cuente el nº de clientes de un banco con al menos 40 años y saldo en cuenta inferior a 1.200 euros;
b) Imprima el saldo menor y el saldo mayor de los clientes mayores de 30 años;
c) Imprima la edad media de todos los clientes;
d) Imprima el número de clientes que se llaman igual y viven en la misma ciudad;*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include<string.h>
struct banco {
int Ncliente;
char Nombre[15];
char Ap[20];
int Edad;
int Saldo;
char Ciudad[20];
};
struct banco Banco[10]; /* max 10 clientes */
/* variable global para guardar los datos de los clientes */
void InsertarCliente();
/* Añade un nuevo cliente al final del fichero */
void ConsultarCliente();
/* Consulta los datos personales de un cliente a traves de la clave del fichero */
void ParteA();
void ParteB();
void ParteC();
void ParteD();
void InsertarCliente()
/* Anade un nuevo cliente al final del fichero */
{FILE *fp;
int Edad, NCliente, Saldo;
char Nombre[20], Ap[20], Ciudad[20];
printf("Cuales son los datos del cliente a insertar?\n");
printf("Cliente:");
scanf("%d", &NCliente);
fflush(stdin);
printf("Nombre:");
gets(Nombre);
fflush(stdin);
printf("Apellido:");
gets(Ap);
printf("Edad:");
scanf("%d", &Edad);
fflush(stdin);
printf("Saldo:");
scanf("%d",&Saldo);
fflush(stdin);
printf("Ciudad:");
gets(Ciudad);
if ((fp=fopen("banco.txt", "a"))==NULL) /* detecta error */
{printf("Error al abrir el fichero");
}
fprintf(fp, "%d %s %s %d %d %s\n", NCliente, Nombre, Ap, Edad, Saldo, Ciudad);
/* escribimos el registro al final del fichero */
if (fclose(fp)==0)
{printf("\nFichero cerrado correctamente");
}
else {printf("Error al cerrar fichero");
}
}
void ConsultarCliente()
/* Consulta los datos personales de un cliente a traves del campo clave NCliente */
{FILE *fp;
int i=0, salir=0, Mat;
printf("Cual es el numero de matricula del cliente a consultar? ");
scanf("%d", &Mat);
if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{printf("Error al abrir el fichero");
}
do
{/* de paso guardamos los datos en estructuras adecuadas */
fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
if (Mat==Banco[i].Ncliente)
{printf("%d %s %s %d %d %s\n", Banco[i].Ncliente, Banco[i].Nombre, Banco[i].Ap, Banco[i].Edad, Banco[i].Saldo, Banco[i].Ciudad);
salir=1;
}
else
{i++;
}
}
while (salir!=1 && !feof(fp));
if (fclose(fp)==0)
{printf("\nFichero cerrado correctamente");
}
else {printf("Error al cerrar fichero");
}
getch();
}
//void Consultarestadisticas()
/* Consulta las estadisticas de los clientes introducidos */
void ParteA()
{
FILE *fp;
int i=0, contador=0;
if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{
printf("Error al abrir el fichero");
}
while (!feof(fp))
{
fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
if(Banco[i].Edad>=40 && Banco[i].Saldo<1200)
contador++;
}
if (fclose(fp)==0)
printf("\nFichero cerrado correctamente\n");
else
printf("Error al cerrar fichero");
printf("Hay %d cliente(s) mayor(es) de 40 años con saldo inferior a 1200 euros.\n", contador);
}
void ParteB()
{
FILE *fp;
int i=0, contador=0, saldo_menor, saldo_mayor;
if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{
printf("Error al abrir el fichero");
}
while (!feof(fp))
{
fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
if(Banco[i].Edad>30)
{
if(contador==0)
{
saldo_menor = Banco[i].Saldo;
saldo_mayor = Banco[i].Saldo;
}
else
{
if(Banco[i].Saldo<saldo_menor)
saldo_menor = Banco[i].Saldo;
if(Banco[i].Saldo>saldo_mayor)
saldo_mayor = Banco[i].Saldo;
}
contador++;
}
}
if (fclose(fp)==0)
printf("\nFichero cerrado correctamente");
else
printf("Error al cerrar fichero");
if(contador==0)
{
printf("No hay personas mayores de 30");
}
else
{
printf("\nSaldo menor: %d\n", saldo_menor);
printf("Saldo mayor: %d\n", saldo_mayor);
printf("Clientes mayores de 30 años: %d\n", contador);
}
}
void ParteC()
{
FILE *fp;
int i=0, suma_edad=0, total=0;
if ((fp=fopen("banco.txt", "r"))==NULL) /* detecta error */
{
printf("Error al abrir el fichero");
}
while (!feof(fp))
{
fscanf(fp, "%d %s %s %d %d %s\n", &(Banco[i].Ncliente), Banco[i].Nombre, Banco[i].Ap, &(Banco[i].Edad), &(Banco[i].Saldo), Banco[i].Ciudad);
suma_edad += Banco[i].Edad;
total++;
}
if (fclose(fp)==0)
printf("\nFichero cerrado correctamente\n");
else
printf("Error al cerrar fichero");
if(total==0)
{
printf("No hay personas");
}
else
{
printf("Edad media: %d\n", suma_edad / total);
}
}
void ParteD()
{
FILE *fp;
int i=0, j, iguales=0, num_clientes=10;
for (j = i + 1; j < num_clientes; j++) {
if ((strcmp(Banco[i].Nombre,Banco[j].Nombre) == 0) && (strcmp(Banco[i].Ciudad,Banco[j].Ciudad) == 0)) {
iguales++;}
}
}
main ()
{FILE * fp;
int resp;
for(;;)
{do
{//clrscr();
printf("\n\t MENU PROGRAMA\n");
printf("\t-----------------\n");
printf("1. Insertar nuevo cliente\n");
printf("2. Consultar cliente\n");
printf("3. Clientes > 40 años y saldo < 1200 euros\n");
printf("4. Saldo menor y mayor de clientes > 30 años\n");
printf("5. Edad media de los clientes\n");
printf("6. Clientes que se llaman igual y viven en la misma ciudad\n");
printf("7. Terminar\n");
scanf("%d", &resp);
}
while (resp!=1 && resp!=2 && resp!=3 && resp!=4 && resp!=5 && resp!=6 && resp!=7 && resp!=8); /* solo aceptamos respuestas validas */
switch (resp)
{case 1: InsertarCliente();
break;
case 2: ConsultarCliente();
break;
case 3: ParteA();
break;
case 4: ParteB();
break;
case 5: ParteC();
break;
case 6: ParteD();
break;
//case 3: ConsultarEstadisticas();
// break;
default: printf("\nFin de programa\a");
exit(0);
break;
}
}
}