› Foros › PC › Software libre
struct datos{
int numero;
char nombre[32];
int intentos;
int aciertos;
};
struct datos jugador[9]
void uno(****aqui no se que poner*****){
int i,num,control=0;
printf("Dime el numero de jugador: ");
scanf("%d",&num);
for(i=0;i<x;i++){
if(jugador[i].numero==num) control++;
}
if (control>0) printf("Ya existe");
}
Juanillooo92 escribió:Pues resulta que ahora quiero mandar ese vector a un subprograma, pero no se como mandarlo. Me podriais poner el prototipo de la funcion
El subprograma tiene que comprobar si un numero que te pide en el subrograma existe ya en el campo numero de jugador
de momento tengo estovoid uno(****aqui no se que poner*****){
int i,num,control=0;
printf("Dime el numero de jugador: ");
scanf("%d",&num);
for(i=0;i<x;i++){
if(jugador[i].numero==num) control++;
}
if (control>0) printf("Ya existe");
}
void uno(datos *d){
int i,num,control=0;
printf("Dime el numero de jugador: ");
scanf("%d",&num);
for(i=0;i<x;i++,d++){
if(d->numero==num) control++;
}
if (control>0) printf("Ya existe");
}
Serede escribió:¿Te compila y funciona bien? Porque en los fragmentos de código que has puesto había cosas un poco sospechosas... xD
Saludos.
/*
***************************************************************
***** ABRIR CON WINDOWS PARA OBTENER MEJORES RESULTADOS *****
* *************************************************************
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct datos{
int numero;
char nombre[32];
int intentos;
int aciertos;
};
//Estas son los subprogramas utilizados
void crearfichero(void);
void uno(struct datos ju[],int jug);
void dos(struct datos ju[],int jug);
void tres(struct datos ju[],int *jug);
int comprueba(struct datos ju[], int n,int jug);
int numvector(struct datos ju[],int n,int jug);
void error(void);
//Estos son ya del juego
int juego(int m);
void llenar(int list1[],int list2[],int m);
void inicializa(int v[],int m);
int danumero(int v[],int x);
void imprime(int v1[],int v2[],int m1[],int m2[],int m);
void ver3s(int v1[],int v2[],int m1[],int m2[],int x,int y,int m);
int main() {
int i,a,njug=0,jugadores;
struct datos jugador[20];
crearfichero();
FILE *registro;
registro=fopen("juego.dat","rb");
while(!feof(registro)){
fread(&jugador[njug],sizeof(struct datos),1,registro);
njug++;
}
jugadores=njug-1;
njug=-1;
while (a!=4){
system("cls");
printf("MENU PRINCIPAL\n\n");
printf("1) Iniciar nueva partida\n");
printf("2) Mostrar estadisticas de las jugadas\n");
printf("3) Registrar usuario\n");
printf("4) Salir\n\nQue quieres hacer: ");
scanf("%d",&a);
fflush( stdin );
switch(a){
case 1:
uno(jugador,jugadores);
break;
case 2:
dos(jugador,jugadores);
break;
case 3:
tres(jugador,&jugadores);
break;
case 4:
system("cls");
printf("Gracias por haber usado el programa\nEspero que nos volvamos a ver\n\n\n");
registro=fopen("juego.dat","wb");
for (i=0;i<jugadores;i++){
fwrite(&jugador[i],sizeof(struct datos),1,registro);
}
fclose(registro);
break;
default:
error();
break;
}
}
}
//Crea el fichero si no existe, si existe lo deja como está
void crearfichero(){
int n,i;
FILE *registro;
struct datos jugador;
registro=fopen("juego.dat","a+b");
fclose(registro);
}
//Elemento del primer menu, sirve para pedir el numero del jugador e iniciar una partida
void uno(struct datos ju[],int jug){
int dif,n,njug;
system("cls");
do{
system("cls");
printf("Dime el numero de jugador: ");
scanf("%d",&n);
while(getchar()!='\n');
}while(comprueba(ju,n,jug)!=1);
njug=numvector(ju,n,jug);
do{printf("\nDime la dificultad (0-5): ");
scanf("%d",&dif);}while(dif>5||dif<0);
system("cls");
printf("Inicia partida el jugador [%d] con la dificultad [%d]",n,dif);
system("sleep 4");
system("cls");
if(juego(dif)==1){
ju[njug].intentos++;
ju[njug].aciertos++;
}else ju[njug].intentos++;
};
//Elemento del primer menú y que despliega otro submenu, nos servira para ver las estadisticas
void dos(struct datos ju[],int jug){
char op;
int n,nivel,njug,i;
float media;
do{
system("cls");
printf("ETADISTICAS\n\n");
printf("a) Mostrar estadisticas un jugador\n");
printf("b) Mostrar todas las estadisticas\n");
printf("c) Volver al menu principal\n\nQue quieres hacer: ");
op=getchar();
while(getchar()!='\n');
switch(op){
case 'a':
do{
system("cls");
printf("Dime el numero de jugador: ");
scanf("%d",&n);
while(getchar()!='\n');
}while(comprueba(ju,n,jug)!=1);
njug=numvector(ju,n,jug);
printf("Estadisticas del Jugador [%d]",n);
media=((float)ju[njug].aciertos/ju[njug].intentos)*100;
if(ju[njug].intentos!=0){
printf("\nNumero: %d Nombre: %s \nIntentos: %d Aciertos: %d --- Media(g/p): %.0f/100 \n\nPresiona enter para salir",
ju[njug].numero,ju[njug].nombre,ju[njug].intentos,ju[njug].aciertos,media);}
else printf("\nNumero: %d Nombre: %s \nIntentos: %d Aciertos: %d --- Media: No se ha jugado %\n\nPresiona enter para salir",
ju[njug].numero,ju[njug].nombre,ju[njug].intentos,ju[njug].aciertos);
while(getchar()!='\n');
break;
case 'b':
system("cls");
printf("-----------------------------");
for(i=0;i<jug;i++){
media=((float)ju[i].aciertos/ju[i].intentos)*100;
printf("\nNumero: %d \nNombre: %s \nIntentos: %d Aciertos: %d \n-----------------------------",
ju[i].numero,ju[i].nombre,ju[i].intentos,ju[i].aciertos);
}
printf("\n\nPresiona enter para salir");
while(getchar()!='\n');
break;
case 'c':
break;
default:
error();
}
}while(op!='c');
}
//Hecho para comprobar si ya existe el numero que se pasa como parametro "n" en el vector jugadores.numero
int comprueba(struct datos ju[], int n,int jug){
int i,control=0;
for (i=0;i<jug;i++){
if(ju[i].numero==n)control++;
}
return control;
}
//Elemento del primer menú, nos sirve para dar de alta un jugador
void tres(struct datos ju[],int *jug){
int n;
do{
system("cls");
printf("Dime el numero de jugador: ");
scanf("%d",&n);
while(getchar()!='\n');
}while(comprueba(ju,n,*jug)>0);
ju[*jug].numero=n;
printf("Damen un nombre: ");
gets(ju[*jug].nombre);
ju[*jug].intentos=0;
ju[*jug].aciertos=0;
system("cls");
printf("Jugador [%d] registrado",ju[*jug].numero);
system("sleep 4");
*jug=*jug+1;
}
//En caso de error se llamara a esta funcion
void error(){
system("cls");
printf(" ****************************\n");
printf(" ** La opcion no es valida **\n");
printf(" ****************************");
system("sleep 2");
}
//Nos dice la posicion del vector en la que se encuentra un número
int numvector(struct datos ju[],int n,int jug){
int i;
for (i=0;i<jug;i++){
if(ju[i].numero==n)return i;
}
}
//Apartir de aqui son subfunciiones relacionadas con el juego
int juego(int m) {
int i,j,a,b,intentos,control=0;
m=m+3;
int lista1[m],lista2[m],mostrar1[m],mostrar2[m];
intentos=m+5;
inicializa(mostrar1,m);
inicializa(mostrar2,m);
llenar(lista1,lista2,m);
for(i=intentos;i>0;i--){
printf(" ********** TIENES %d INTENTOS **********\n\n",i);
imprime(lista1,lista2,mostrar1,mostrar2,m);
printf("\n\n\nPrimera lista(0-%d): ",m-1);
scanf("%d",&a);
printf("Segunda lista(0-%d): ",m-1);
scanf("%d",&b);
if(danumero(lista1,a)==danumero(lista2,b)){
mostrar1[a]=1;
mostrar2[b]=1;
}
ver3s(lista1,lista2,mostrar1,mostrar2,a,b,m);
control=0;
for(j=0;j<m;j++){
if(mostrar1[j]==1)control++;
}
if (control==m){
system("cls");
printf("\nBIEN, HAS GANADO\n");
system("sleep 5");
return 1;
}
}
system("cls");
printf("\nLO LAMENTO, HAS PERDIDO\n");
system("sleep 5");
return 0;
}
void llenar(int list1[],int list2[],int m){
int ale,a=0,i,control=1,num[10];
for(i=0;i<10;i++)num[i]=0;
srand((unsigned) time(NULL));
for (i=0;i<m;i++){
ale=rand();
ale=ale%10;
list1[i]=ale;
num[ale]++;
}
while(control!=0){
control=0;
ale=rand();
ale=ale%10;
if(num[ale]!=0){
list2[a]=ale;
a++;
num[ale]--;
}
for(i=0;i<10;i++){
if(num[i]!=0)control++;
}
}
}
void inicializa(int v[],int m){
int i;
for (i=0;i<m;i++){
v[i]=0;
}
}
int danumero(int v[],int x){
int r;
r=v[x];
return r;
}
void imprime(int v1[],int v2[],int m1[],int m2[],int m){
int i;
printf("\n");
for(i=0;i<m;i++){
if (m1[i]==0)printf(" - "); else printf(" %d ",v1[i]);
}
printf("\n");
for(i=0;i<m;i++){
if (m2[i]==0)printf(" - "); else printf(" %d ",v2[i]);
}
}
void ver3s(int v1[],int v2[],int m1[],int m2[],int x,int y,int m){
int i;
system("cls");
printf(" ********** MEMORIZA EN 3 SEGUNDOS **********\n\n\n");
for(i=0;i<m;i++){
if (m1[i]==1||i==x)printf(" %d ",v1[i]); else printf(" - ");
}
printf("\n");
for(i=0;i<m;i++){
if (m2[i]==1||i==y)printf(" %d ",v2[i]); else printf(" - ");
}
system("sleep 3");
system("cls");
}
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
# define CLS system("cls");
#else
# define CLS system("clear");
#endif
int main(void){
CLS
printf("hola mundo\n");
return 0;
}