[c] structure doorheen een programma gebruiken

Status
Niet open voor verdere reacties.

aerandir

Gebruiker
Lid geworden
15 mrt 2006
Berichten
9
hey,

Ik zou een programma moeten schrijven waarmee ik data inlees uit een bestand, deze data in een structure zet en ik deze data dan in alle functies kan gebruiken, nu is het probleem dat ik de data uit de strucure wel kan uitlezen in dezelde functie als waar ik ze inlees, maar in andere functies kan ik de strucure niet gebruiken.

codes:
horserace.c
Code:
/******************************************************************
Dit programma toont de basisstructuur voor het werken met een menu.
*******************************************************************/
#include "paard.h"

/******************************************************************
Functieprototypes:
*******************************************************************/

int menu_keuze(void);
void inlezen_paarden(void);
void invoeren_startbedrag(void);
void inzetten(void);
void start_race(void);



/******************************************************************
Het hoofdprogramma blijft in een lus het menu tonen
totdat de gebruiker wil stoppen (keuze 0).
*******************************************************************/
int main(void)
{
	int keuze;
	do {
		keuze = menu_keuze();
		switch(keuze) {
			case 1:	inlezen_paarden(); break;
			case 2:	invoeren_startbedrag(); break;
			case 3:	inzetten(); break;
			case 4:	start_race(); break;
		}
	} while(keuze);

	return 0;
}

/******************************************************************
De functie menukeuze maakt het scherm leeg,
toont een menu en leest een keuze in.
*******************************************************************/
int menu_keuze(void)
{
	int keuze;
	clrscr();
	printf(" -------------------------\n");
	printf("| ***    HORSERACE   ***  |\n");
	printf("|-------------------------|\n");
	printf("| 1. Inlezen van paarden  |\n");
	printf("| 2. Invoeren startbedrag |\n");
	printf("| 3. Inzetten	          |\n");
	printf("| 4. Start race		  |\n");
	printf("|                         |\n");
	printf("| 0. einde                |\n");
	printf(" -------------------------\n");
	printf("\nUw keuze: ");
	scanf("%d%*c", &keuze);
	clrscr();

	return keuze;
}
/******************************************************************
De functies werden niet verder uitgewerkt.
Hier kan eventueel een submenu getoond worden,
of naar onderliggende, meer gedetailleerde functies gesprongen worden
*******************************************************************/
void inlezen_paarden(void)
{
PAARDEN* paarden;
	int aantal=20;
		paarden=calloc(aantal,sizeof(PAARDEN));
		vul_tab(paarden);
		qsort(paarden,aantal,sizeof(PAARDEN),vgl);
		toon_tab(paarden);
		free(paarden);
		}

void invoeren_startbedrag(void)
{



}


void start_race(void)
{
	//...
	printf("\n\nDruk op een toets om terug te keren...");
	getchar();
}

void inzetten(void)
{
	PAARDEN paarden[20];
	gokform1(paarden);

}
functies.c
Code:
#include "paard.h"

//tabel vullen
void vul_tab(PAARDEN* paarden)
{
	FILE *prd;
	int i=0;

	if ((prd = fopen("paarden.txt","r")) == NULL){
		printf("het bestand bestaat niet");
		exit(1);
	}

		fscanf(prd,"%2d",&paarden[i].kans);
		while(!feof(prd)){
			fscanf(prd,"%[^\n]",paarden[i].paard);
			i++;
			fscanf(prd,"%2d",&paarden[i].kans);
		}
		fclose(prd);
}

//tabel weergeven
void toon_tab(PAARDEN* paarden){
	int i;

		for(i=0;i<20;i++){
		paarden[i].nummer=i+1;
		printf("! %2d %-18s \t\theeft %2d tegen 1 kans om te winnen. !\n",paarden[i].nummer,paarden[i].paard,paarden[i].kans);
		printf("!---------------------------------------------------------------------------!\n");
		}

	printf("\n\nPaarden succesvol ingelezen,druk op een toets om terug te keren...");
	getchar();
}

//vgl voor de qsort
int vgl(const void* p,const void* q){
	PAARDEN a,b;
	a=*(PAARDEN*)p;
	b=*(PAARDEN*)q;
	return a.kans-b.kans;
	}

//inzetten
void gokform1(PAARDEN* paarden){
int i=0;
SPELER speler;
printf("!********************************************************************!\n");
printf("!                      Horse Race : Gokformulier                     !\n");
printf("!********************************************************************!\n");
printf("!                         Voer uw naam in:						           !\n");
scanf("%s",speler.speler);
printf("!********************************************************************!\n");
printf("!\t\t   Uw naam is: %s     !\n",speler.speler);
printf("!********************************************************************!\n");
printf("!                  Selecteer uw aantal paarden (12-20)               !\n");
scanf("%d",&speler.aantalprd);
printf("!********************************************************************!\n");
				printf("!\t\t   u hebt voor %d paarden gekozen.\t\t     !\n",speler.aantalprd);
				printf("!********************************************************************!\n");
				printf("!\t\t   Op deze paarden kan u gokken:\t\t     !\n");
				printf("!********************************************************************!\n");
				fflush(stdin);
				for(i=0;i<speler.aantalprd;i++){
				paarden[i].nummer=i+1;
				printf("! %2d %s %2d / 1 \n",paarden[i].nummer,paarden[i].paard,paarden[i].kans);
				printf("!********************************************************************!\n");

				}
			printf("\n\nDruk op een toets om terug te keren...");
			fflush(stdin);
	getchar();

				}

paard.h
Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct{
	int nummer;
	int kans;
	char paard[30];
	} PAARDEN;
typedef struct{
	char speler[30];
	int totbedr;
	int aantalprd;
	int paard1;
	int paard2;
	int paard3;
	int bedr1;
	int bedr2;
	int bedr3;
	} SPELER;
extern int output(void);
extern int vgl (const void*,const void*);
extern void vul_tab(PAARDEN*);
extern void toon_tab(PAARDEN*);
extern void gokform1(PAARDEN*);

dus, wanneer ik in het menu paarden inlezen neem, worden deze ingelezen,in de structure paard gezet en op het scherm getoond. Maar wanneer ik dan terug naar de menu ga en ik kies optie 3 om in te zetten en opnieuw een aantal paarden wil weergeven lukt dit niet. Ik hoop dat de uitleg een beetje duidelijk was en alvast bedankt!

aerandir
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan