Probleempje met programmeeroefening

Status
Niet open voor verdere reacties.

CanTBeaTme

Banned
Lid geworden
25 jul 2006
Berichten
235
Ik heb bezig met het leren van C++ en ben momenteel bezig met structures. k heb een klein programmatje gemaakt als oefening. er zitten geen errors in en als output krijg ik garbage :s


Het is een programma dat voor sporters een score en naam vraagt, en uiteindelijk uit al de
sporters de winnaar, de verliezer, en het gemiddelde berekend:) en deze ook op het scherm zet

#include <iostream.h>
#include <string.h>
#include <sstream.h>

struct Info
{
char name[20];
float score;
};

//prototypes

void fillinfo (Info player[]);
void print (float avarage,char winner[],char loser[]);

void main()
{
Info player[8];
fillinfo( &player[8]);

float avarage = 0;
float comparingval = 0;
float comparingval2 = 10.00;
char winner[20]= "empty";
char loser[20]= "empty";


for (int z = 0; z<8; z++)
{
avarage +=player[z].score;
if (player[z].score >comparingval)
{
strncpy(winner,player[z].name,20);
comparingval += player[z].score;
} else
if (player[z].score<comparingval2)
{
strncpy(loser,player[z].name,20);
comparingval2 = player[z].score;
}
}
avarage = avarage/8;

print (avarage,&winner[20],&loser[20]);

}


void fillinfo (Info player[])
{
int w = 1;

for (int x = 0; x>8; x++,w++)
{
cout <<"player number "<<w<<" :"<<endl;
cout <<"Name: ";
cin.getline(player[x].name,20);
cout <<"Score: ";
cin >> player[x].score;
}
}


void print (float avarage,char winner[],char loser[])
{
cout <<"The winner is: "<<winner<<endl;
cout <<"The loser is: "<<loser<<endl;
cout <<"The avarage score is:"<<avarage<<endl;
}


Het lijkt alsof de functie fillinfo gewoon word overgeslagen. heb deze functie ook al gewoon in main gezet om te zien of ie het dan doet. maar krijg dan nog altijd garbage als output :s
ik krijg tijdes de compile geen errors of warnings er gebeurt gewoon niets

elk beetje hulp is welkom
alvast bedankt.
 
Nu ben ik niet echt een ster in C++ (heb wat C gehad een paar jaar geleden), maar het lijkt mij dat je functies declareert vóórdat je main() aanroept. De aan te roepen functie moet eerst bekend worden (het programma moet er doorheen lezen) voordat je er iets mee kunt doen. Je functie "fillinfo" in main() zetten gaat niets uithalen, dat is immers een functie in een functie. Probeer eens te schuiven in je code zodat main() als laatste functie wordt aangeroepen in je programma (fillinfo en print naar boven verplaatsen).
 
Laatst bewerkt:
:)

Azhriaz zei:
Nu ben ik niet echt een ster in C++ (heb wat C gehad een paar jaar geleden), maar het lijkt mij dat je functies declareert vóórdat je main() aanroept. De aan te roepen functie moet eerst bekend worden (het programma moet er doorheen lezen) voordat je er iets mee kunt doen. Je functie "fillinfo" in main() zetten gaat niets uithalen, dat is immers een functie in een functie. Probeer eens te schuiven in je code zodat main() als laatste functie wordt aangeroepen in je programma (fillinfo en print naar boven verplaatsen).


//prototypes
void fillinfo (Info player[]);
void print (float avarage,char winner[],char loser[]);

dit zijn de prototypes die er voor zorgen dat de functies niet voor main moetten. ik vind het
beter als je main direct als eerste ding ziet omdat main... ja... dus main is :d main... :p

toch bedankt
 
fillinfo( &player[8]); <-- in regel 20 geef je het adres van player nummer 8 mee. Dat kan volgens mij niet de bedoeling zijn.

Dit moet waarschijnlijk het beginadres van player zijn. Ik zou bij de declaratie van je array van Players ook gelijk de structs initialiseren. Dan heb je nog kans dat je ziet wat er in je geheugen gebeurd.

Daget
 
Heel erg bedankt voor dit je hebt gelijk :P. maar wat bedoel je met dit:

Ik zou bij de declaratie van je array van Players ook gelijk de structs initialiseren. Dan heb je nog kans dat je ziet wat er in je geheugen gebeurd.


en hoe krijg ik die hele array dan doorgegeven. kan je me een voorbeeld geven?
als ik het zo doe : fillinfo( &player[]); dan zegt ie
"untitled1.cpp": E2188 Expression syntax in function main() at line 15
en als ik het zo doe : fillinfo( player[8]); dan zegt ie
"untitled1.cpp": E2034 Cannot convert 'Info' to 'Info *' in function main() at line 15
"untitled1.cpp": E2342 Type mismatch in parameter 'player' (wanted 'Info *', got 'Info') in function main() at line 15



:s
 
Laatst bewerkt:
net als dat je float average = 0; zegt, kun je ook :

struct Info
{
char name[20] = "";
float score =0;
};

zeggen. :)

Een array kun je aanwijzen door het adres van het 1e element te pakken:

Dit zou &players[0] opleveren. Nu zijn arrays zo gedefinieerd dat de naam van dat array gelijk staat aan dat adres. In jouw geval wordt het dus: fillinfo( player);

Daget

ps. je was al aan het experimenteren geslagen zie ik. :)

<ongegeneerde reclame>

Bruce Eckel heeft een (gratis te downloaden) boek over c++: http://www.ferryvink.nl/ebooks/eckel/TICPP-2nd-ed-Vol-one.zip

Daarin staat heel netjes uitgelegd hoe dat nou zit met pass by value en pass by reference.

</ongegeneerde reclame>
 
Laatst bewerkt:
Het lukt me niet ik ben de kluts kwijt :(

ja ik weet wel hoe dat werkt... reference value etc, maar nu zit ik met die structure en nu lukt het me niet meer :s
 
ok, even rustig ademhalen... :)

Wat heb je geprobeerd? En wat was het resultaat? Heb je wijzigingen gemaakt in de code die je al gepost hebt?
 
Gisteravond zat ik geloof ik te slapen...

Ik heb vanmiddag met een soortgelijk probleem gezeten, dus ik kan je nu een beter voorbeeld geven:

Code:
typedef struct 
{
	char Name[13];
	char Command[256];
	char Device_ID[21];
} ConfigurableButton;

typedef struct
{
    char ac_ProjectPath [ MAX_LEN_PATH ];
    char ac_ResultLogPath [ MAX_LEN_PATH + MAX_LEN_FILENAME+1 ];

    int  i32_GUIType; 

    char ac_Sequence [ MAX_LEN_FILENAME ];
    char ac_StartSequence [ MAX_LEN_SEQNAME ];
    char ac_OptionSequence [ MAX_LEN_SEQNAME  ];
    char ac_SetGUIControlStatus [ MAX_LEN_SEQNAME  ];

    ConfigurableButton ac_ButtonTab[6];

} IniVars;
                                

static IniVars    s_IniVars = { {""},
					   {""},
                                           {0},
                                           {""},
                                           {""},
                                           {""},
                                           {""},
					   {{ "", "", ""}, // 0   // an array of 6 configurable buttons
    	  				    { "", "", ""}, // 1
			  		    { "", "", ""}, // 2
					    { "", "", ""}, // 3
				            { "", "", ""}, // 4
					    { "", "", ""}}, // 5
                                            };

Helemaal bovenaan zie je dat ik een structure definieer dat ConfigurableButton heet. Daaronder definieer ik een tweede structure die een array van ConfigurableButtons bevat.

Als laatste zie je dat ik een variabele s_IniVars definieer die van het type Inivars is.
Bij de definitie initialiseers ik alle chars op "", en integers op 0.
Je ziet dat ik het array met de structures ook ineens initialiseer. Voor de duidelijkheid gebruik ik accolades, maar dat hoeft niet. Als je waarde hecht aan je mentale gezondheid zou ik er een gewoonte van maken om het wel te doen... :)

Een pointer naar het structure IniVars definieer je als volgt:

struct IniVars *pointerNaarIniVars

Ik hoop dat het zo iets duidelijker wordt.

Daget
 
Heel erg bedankt

ik heb wat informatie opgezocht over wat ik gebruikte in deze code en heb hem eens herschreven, duidelijker enzo. het werkte toen wel :s heb wel wat lopen knoeien. het enigste nadeel is dat ik eigelijk nog altijd niet weet wat er dan fout was aan de vorige code. maar zal nog wel komen :)


Heel erg bedankt voor je hulp. hoelang ben jij eigelijk al bezig met c++ ? :P
ik heb voormalig ook al wat vb gedaan (vond ik stom omdat het weinig mogelijkheden heeft en voor alleen WINDOWS is) python heb ik ook gedaan, maar eigelijk alleen maar als doel om duidelijkheid te scheppen in de allereerste "stappen" van programmeren, daarna terug(na een gefaalde poging) overgestapt naar c++ :P en toen ging het dus wel lekker :)


groetjes :)
 
Ik ben na 3,5 jaar delphi geprogrammeerd te hebben overgestapt op c / c++. De redenen waren ongeveer hetzelfde als de jouwe. :) Daarbij ben ik in die tijd behoorlijk enthousiast geraakt over linux & bsd systemen, dus dan wordt het ook logisch om over te stappen.

Het voordeel ( en nadeel :) ) van c / c++ is dat er veel minder "geregeld" is dan in bijvoorbeeld VB of Delphi, en je dus een veel beter beeld krijgt van wat er nou onder de motorkap gebeurd. En met name op geheugen beheer wordt je bij c / c++ echt gedwongen om goed te kijken waar je mee bezig bent. Het resultaat is bij mij in ieder geval een stuk nettere code en efficienter design.

Voor mij is het helpen hier op het forum dus een goeie oefening in het kijken naar de praktische problemen van medeprogrammeurs en zo zelf ook nog 's wat uit te zoeken.

Daget
 
Ik sta op dit moment om 5.30 op. Dus ik zie de vogels nog de slaap uit hun ogen wrijven. :)
Van beroep ben ik software engineer... oftewel programmeur, dus ik mag me de hele dag betaald bezig houden met m'n hobby.

Jij bent nog aan 't scholeren begrijp ik?
 
Jep, en ik zit niet in de richting waar we programmeren op school krijgen:p
zit meer in de richting waarin informatica staat voor : hoe gebruik je je computer(leren met word werken enzo) dus geen "echte" informatica :d maar ben er dus wel heel erg in geintresseerd :P ben 15 jaar ;)

ik leer het mezelf wel ;)
 
Laatst bewerkt:
Ik ben al iets of wat ouder en blij van school af te zijn... :)

geeb stinkin' huiswerk & tentamens meer.

Ik kan je technische informatica als opleiding aanraden. Al is het het eerste jaar wel even doorbijten. Je krijgt een berg wiskunde & pure theorie over je heen voor je pas echt iets mag gaan doen. Dat is trouwens bij alle technische opleidingen zo, daar doe je niks aan.

Maar goed, het salaris dat ik er nu mee verdien maakt het allemaal meer dan goed. :D
 
Ik zal het overwegen, alleen ik zie programmeren niet als werk:p mijn pa is ingenieur en moet ook software schrijven (niet waar hij eigelijk is voor opgeleid maar toch ;) ) en ja hij verdient GOED :p maar ik wil programmeren meer als hobby houden ;)
zit trouwens ook in het technish :P en ja, krijg 6 uur wiskunde :P (nu nog niet maar volgend jaar wel) ;)
 
Laatst bewerkt:
Ik wordt nu ook omringt door electronici en natuurkundigen. Zo krijg je nog 's wat kruisbestuiving van kennis.

Maar goed, ik ga weer 's naar een volgende thread. :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan