
Ayuda estructuras
Publicado por Victor (17 intervenciones) el 02/09/2016 18:57:29
Hola buenas, quisiera que me ayudaseis en este ejercicio. El programa despues de almacenar los datos de varias personas, te da la opcion de seguir añadiendo o de buscar a una persona por su DNI.Al buscar a la persona mediante el DNI la funcion te tiene que devolver la edad de la persona asociada a ese DNI, mi problema es que introduzco dos DNI's exactamente iguales, y me dice que no coinciden, y yo creo que es al pasar la variable dni como parametro de la funcion, y no se como resolverlo. El programa tiene un fallo muy evidente y es que si le das a buscar una persona sin antes haber almacenado personas, el programa no te suelta ningun fallo, pero bueno, no vengo por ese error, vengo por el problema mencionado anteriormente.
PD: si pones *dni al comparar los strings con strcmp te salta error :(
PD: si pones *dni al comparar los strings con strcmp te salta error :(
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
//Ejercicio 26
#include <stdio.h>
#include <string.h>
typedef struct{
char DNI[10];
char nombre[50];
char apellidos[50];
int edad;
int lleno;
}personas;
personas person[20];
void vacio();
void anadepersonas();
int busca_persona(personas x[],char *dni);
void cambio(char palabra[]);
int main(){
int op, aux;
char dni[10], key;
vacio();
do{
do{
printf("Elige que deseas hacer: \n");
printf("(1) Almacenar personas.\n");
printf("(2) Buscar persona.\n");
printf("\nSeleccione opcion: ");
scanf("%i",&op);
switch (op){
case 1:
anadepersonas();
break;
case 2:
printf("Introduce el DNI: ");
fflush(stdin);
fgets(dni, 10, stdin);
cambio(dni);
aux = busca_persona(person, dni);
if(aux == 1){
printf("El DNI introducido no coincide con ninguna persona.\n");
}
else {
printf("La edad de la persona es %i",aux);
}
break;
}
}while( op < 1 || op > 2);
printf("Desea realizar alguna operacion mas? (S/N): ");
fflush(stdin);
scanf("%c",&key);
}while(key == 'S' || key == 's');
system("pause");
return 0;
}
void vacio(){
int i;
for(i = 0; i < 20; i++){
person[i].lleno = 0;
}
}
void anadepersonas(){
int i, j, aux;
aux = 0;
for(i = 0; i < 20 && aux == 0; i++){
for(j = 0; j < 50 && aux == 0; j++){
if(person[i].lleno == 0){
printf("Introduce el nombre: ");
fflush(stdin);
fgets(person[i].nombre, 50, stdin);
printf("Introduce los apellidos: ");
fflush(stdin);
fgets(person[i].apellidos, 50, stdin);
printf("Introduce la edad: ");
scanf("%i",&person[i].edad);
printf("Introduce el DNI: ");
fflush(stdin);
fgets(person[i].DNI, 10, stdin);
cambio(person[i].DNI);
person[i].lleno = 1;
aux = 1;
}
}
}
if(aux == 0){
printf("No queda hueco para almacenar mas personas.\n");
}
}
int busca_persona(personas x[],char *dni){
int i, j, aux, edad, temp;
aux = 1;
temp = 0;
for(i = 0; i < 20 && temp == 0; i++){
if(x[i].lleno == 1){
aux = strcmp(dni, x[i].DNI);
if(aux == 0){
edad = x[i].edad;
}
else{
edad = 1;
}
}
else{
printf("No hay personas almacenadas.\n");
temp = 1;
}
}
return edad;
}
void cambio(char palabra[]){
int i;
for(i = 0; i < 50; i++){
if(palabra[i] == '\n'){
palabra[i] = '\0';
}
}
}
Valora esta pregunta


0