tengo este programita en c, en el que doy de alta a competidores y quiero que se cuente cuantos estan dados de alta (participan) y cuantos no participan en las pruebas.
Resulta que he creado un bucle que compare el nombre de la prueba a la que se ha presentado el atleta, y si el nombre de esa prueba es igual a "vacio", que no cuente para el recuento de atletas que compiten.
Al parecer esta todo bien, pero al ejecutar el programa me sale que ha dejado de funcionar, cuando intento que me muestre los participantes,
la funcion me devuelve los que NO PARTICIPAN(2), y para imprimir los que SI PARTICIPAN(100 que es el maximo menos 2).
participantes = maxAtletas/*100*/ - dimeNoParticipantes/*4*/ = 96
Código:
/*
============================================================================
Name : Olimpiadas.c
Author :
Version :
Copyright : Your copyright notice
Description : Hello World in C, Ansi-style
============================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxAtletas 100
#define maxPruebas 15
#define noConsta "vacio"
typedef struct {
char nombre[50];
char pais[15];
char prueba[40];
int edad;
int posicion;
}Atleta;
typedef Atleta listaAtletas[maxAtletas]; // creamos un array de atletas [a1,a2...an]
listaAtletas lista;
int dimeNoParticipantes(){
int i;
int noParticipantes = 0;
int tamanio= sizeof(listaAtletas); // tamanio = tamaño array
for(i=0;i<tamanio;i++){
//desde 0 hasta el tamaño tAtletas contar si prueba es >0
char comp1 [50];
strcpy(comp1, lista[i].prueba); // contenido de lista[i].prueba copiado a variable comp1
char comp2 [50] = noConsta;
int control = strcmp(comp1,comp2); // si son iguales devuelve 0
if(control==0){ // si devuelve 0 son iguales, luego NO ha participado, incrementamos contador
noParticipantes++;
}
}
return noParticipantes;
}
int main(void) {
/*Si la posicion del atleta en alguna prueba es 0,
* siginifica que el atleta aun no ha realizado la prueba.
*/
// creamos los atletas--> 1...6 (max=100)
Atleta a0 = {"Gerardo Martinez","Espania","100m Lisos",20,3};
Atleta a1 = {"Miroslav Djuckich","Rumania","Lanzamiento de martillo",20};
Atleta a2= {"Jean Claude Van Damme","EEUU","Artes Marciales",24};
Atleta a3= {"David Silva","Espania","vacio",19};
Atleta a4 = {"Miroslav Klose","Alemania","vacio",26};
//rellenamos el array de atletas con los atletas creados
lista[0]=a0;
lista[1]=a1;
lista[2]=a2;
lista[3]=a3;
lista[4]=a4;
int participantes = (maxAtletas - dimeNoParticipantes());
printf("%d", participantes);
return 0;
}
NOTA:.
Si en la funcion en vez de poner (control!=0) pongo (control==0) si que me da correctamente el numero de participantes QUE NO PARTICIPAN EN PRUEBAS, pero el numero de participantes que SI PARTICIPAN EN PRUEBAS, me da numeros muy altos y extraños