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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Guardar salida de funcion en otra variable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Guardar salida de funcion en otra variable  (Leído 1,587 veces)
dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Guardar salida de funcion en otra variable
« en: 27 Noviembre 2013, 00:57 am »

Buenas,
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


« Última modificación: 27 Noviembre 2013, 01:37 am por dennis094 » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Guardar salida de funcion en otra variable
« Respuesta #1 en: 27 Noviembre 2013, 03:21 am »

Cuando desarrolles un programa trata de verificar este con el menor numero de datos, por ejemplo en tu caso puedes reducir el numero de atletas a diez.

Los problemas en tu programa son dos: 1) no tomas en cuenta el numero de elementos utilizados en la lista de atletas (cinco), solo el numero máximo (cien) y 2) calculas mal el numero de elementos en el array "lista":
Código
  1. int tamanio = sizeof(listaAtletas); // tamanio = tamaño array
Eso no dará el resultado correcto porque es el numero de bytes utilizados por el array.

Para conocer el numero de elementos en el array debes utilizar:
Código
  1. int tamanio = (int) (sizeof lista / sizeof lista[0]);
Con eso se soluciona el error critico en tiempo de ejecución pero se procesan de forma innecesaria todos los elementos del array, por eso deberías cambiar la función para que solo procese los elementos utilizados (indicando el numero de estos a la función con un argumento).

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
dennis094

Desconectado Desconectado

Mensajes: 185


Embrace your dreams, protect your honor


Ver Perfil
Re: Guardar salida de funcion en otra variable
« Respuesta #2 en: 27 Noviembre 2013, 18:04 pm »

Ah de acuerdo,
muchas gracias ya me funciona, la verdad es que no sabia que se hacia asi para contar el numero de elementos del array, no se me hubiera ocurrido.
Lo apunto, gracias de nuevo ! ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Guardar salida en php a pdf
PHP
dark_fidodido 5 7,160 Último mensaje 7 Julio 2009, 09:27 am
por dark_fidodido
[BATCH] Guardar salida de comando a variable
Scripting
ddffgg 3 13,152 Último mensaje 7 Febrero 2013, 12:30 pm
por Eleкtro
Como llamar a una funcion dentro de otra funcion. Una ayuda urgentemente porfavo
Programación C/C++
LobateZZZ 1 6,615 Último mensaje 14 Abril 2013, 03:07 am
por rir3760
Función para saber si alguna variable es igual a otra
Programación Visual Basic
juanlulete 4 1,415 Último mensaje 28 Junio 2015, 01:06 am
por R3Z
como pasar variable de una a otra desde una funcion « 1 2 »
Programación C/C++
geshiro 16 4,279 Último mensaje 22 Mayo 2016, 03:51 am
por geshiro
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines