Toon posts:

[C] Waarde uit een functie terug geven aan main()

Pagina: 1
Acties:
  • 376 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een programma geschreven in de C Compiler.
Hij werkt al wel, maar ik heb het volgende probleem.

Ik heb de functie controle()
die aangeroepen wordt als void controle()

in mijn hoofdprogramma heb ik een variabele winnaar die standaard
op '0' wordt gezet als het programma begint.

Als een van beide spelers 3 op een rij heeft moet de waarde
van winnaar '1' worden en dan moet deze worden terug gegeven
aan het hoofdprogramma waar de do-while functie zit die loopt
tot beurt<=8 of winnaar!=0

Ik krijg de error dat ik geen waarde terug kan geven aan het
hoofd programma, maar ik kan niet ontdekken wat ik moet veranderen.

Hier is de volledige sourcecode

Ik heb de sourcecode maar niet hier gezet, hij is nogal
groot om in een topicje te pasten >:)

Verwijderd

Ik heb je code niet gelezen, maar uit je verhaal maak ik op dat je alleen het volgende hoeft te veranderen:

void controle()

moet zijn:

int controle()

  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

...en vervolgens wel het nummer van de winnaar returnen ;)

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


Verwijderd

Topicstarter
Op dinsdag 11 december 2001 19:06 schreef Xalista het volgende:
Ik heb je code niet gelezen, maar uit je verhaal maak ik op dat je alleen het volgende hoeft te veranderen:

void controle()

moet zijn:

int controle()
Moet ik dat doen bij de declaratie van de functie of bij
het begin van de functie zelf???

dus in void main()
die void naar int zetten

of als ik de functie start
code:
1
2
3
4
5
void controle()
{
 ...;
 return (winnaar);
}

omzetten naar
code:
1
2
3
4
5
int controle()
{
 ...;
 return (winnaar);
}

  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

Je kunt het programma trouwens wel mooier maken... (hij klopt wel hoor, daar niet van :) )
Als je het spel nou nog eens een keer uit wil breiden naar 'N op een rij' krijg je nl. nog een leuk werkje! :P ;)

/edit zag je andere vraag. Je hebt zeker nog niet veel ervaring met C/C++/Java ? Check de FAQ eens, daar staan dat soort dingen wel in. ;)

In het kort:
VOOR de functienaam staat het return type.
'void' returnt niets (gewone procedure dus)
'int' betekent dat de proc een waarde oplevert, een functie dus. Bij de declaratie zeg je dus 'int controle()' en dan kun je een waarde vanuit de functie teruggeven met 'return 1'.

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <foo.h>


//prototypes
int controle(foo args);

int main(int argc, char **argv){
 int result;

 result = controle(foo);
}

int controle(foo args){
 do_stuff();
 return 1;
}

iets in die richting ;)

All my posts are provided as-is. They come with NO WARRANTY at all.


Verwijderd

Topicstarter
Op dinsdag 11 december 2001 19:19 schreef Nappa het volgende:
Je kunt het programma trouwens wel mooier maken... (hij klopt wel hoor, daar niet van :) )
Als je het spel nou nog eens een keer uit wil breiden naar 'N op een rij' krijg je nl. nog een leuk werkje! :P ;)

/edit zag je andere vraag. Je hebt zeker nog niet veel ervaring met C/C++/Java ? Check de FAQ eens, daar staan dat soort dingen wel in. ;)

In het kort:
VOOR de functienaam staat het return type.
'void' returnt niets (gewone procedure dus)
'int' betekent dat de proc een waarde oplevert, een functie dus. Bij de declaratie zeg je dus 'int controle()' en dan kun je een waarde vanuit de functie teruggeven met 'return 1'.
Nou ja, de ervaring die ik heb, die staat in dat programma
ben in september in 2e klas Technische Informatica (MBO)
begonnen met C, en ik zal je nog sterker vertellen, ik hoor
nog bij het betere gedeelte van de klas, dus de rest is nog
erger. Maar ik wil weer te veel hoor, want dit zou de leraar
al goed keuren, maar ik vin t 3x niks, het kan veel beter.

Maar ja, hij returnt nou wel de waarde, maar nou stopt ie helemaal niet meer :(

Klote zooi aarrrggghhh ben ik dan zo |:(

  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

Je moet dus iets krijgen als:
code:
1
2
3
4
5
6
7
do
 {
 ***KNIP***
  plaats();
  winnaar = controle();
 }
while (winnaar!=0 || beurt!=8);

En in controle moet je per mogelijkheid iets zeggen als:
code:
1
if ((vak1==vak4) && (vak4==vak7)) return(vak1);

(aangenomen dat je in die variabelen de speler neerzet die hun kruisje/rondje daar geplaatst hebben.
Begint het te dagen?

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


  • koffercomputer
  • Registratie: Oktober 2000
  • Laatst online: 15-09 16:57
[quote]Op dinsdag 11 december 2001 19:34 schreef Nappa het volgende:
Je moet dus iets krijgen als:
code:
1
2
3
4
5
6
7
do
 {
 ***KNIP***
  plaats();
  winnaar = controle();
 }
while (winnaar!=0 || beurt!=8);

Eeeh, klopt dat wel? Als er nog geen winnaar is, en de 8e beurt is aan de gang, dan blijft hij doorgaan.
Of.. als er nog geen winnaar is, en de beurt is 8, dan zal hij ook door blijven gaan...

Beter is dan:
code:
1
2
3
4
5
6
7
do
 {
 ***KNIP***
  plaats();
  winnaar = controle();
 }
while (winnaar!=0 && beurt!=8);

&& in plaats van || dus. (Niet dat ik C kan programmeren of zo hoor... misschien zwets ik wel wat in de ruimte)

Ik heb het opgegeven om nog correct Nederlands te blijven typen. 22.10.02


  • CyBeR
  • Registratie: September 2001
  • Niet online

CyBeR

💩

Op dinsdag 11 december 2001 19:34 schreef Nappa een heel verhaal
lijkt me handiger als je neemt
code:
1
2
3
do {
    bla
} while (!winnaar && beurt <= 8);

denk ik >:)

All my posts are provided as-is. They come with NO WARRANTY at all.


  • Nappa
  • Registratie: Februari 2001
  • Laatst online: 15-09 18:51

Nappa

The Barbaric Saiya-jin!

Op dinsdag 11 december 2001 19:41 schreef koffercomputer het volgende:
Beter is dan:
code:
1
2
3
4
5
6
7
do
 {
 ***KNIP***
  plaats();
  winnaar = controle();
 }
while (winnaar!=0 && beurt!=8);

&& in plaats van || dus. (Niet dat ik C kan programmeren of zo hoor... misschien zwets ik wel wat in de ruimte)
Klopt helemaal! :o
Ik heb die guard rechtstreeks uit zijn programma geknipt, en had die fout niet gespot, vandaar...

Trouwens, zorg er wel voor dat je in het geval van geen winnaar 0 oplevert met de controle functie.

Alles wat ik zeg kan en zal tegen u gebruikt worden
Scream! Suffer! Panic! | Dark-future Dawnbringer | Unofficial Mordor community


Verwijderd

Mag je wel void functies en return functies in 1 gebruiken?? ja toch?

Verwijderd

Op dinsdag 11 december 2001 20:00 schreef jst2000c het volgende:
Mag je wel void functies en return functies in 1 gebruiken?? ja toch?
:? Ik weet niet precies wat je bedoeld maar 'void functies' bestaan niet,
code:
1
2
3
void blaat() {
     bla();
}

is dus een procedure


en dit,
code:
1
2
3
4
int blaat() {
    boe();
return 1;
}

is een functie.

Verwijderd

Topicstarter
Op dinsdag 11 december 2001 20:00 schreef jst2000c het volgende:
Mag je wel void functies en return functies in 1 gebruiken?? ja toch?
Dat mag je dus juist niet
void wil zeggen dat je geen waarde terug geeft.

Probeer maar een void procedure te maken en dan onderaan
return 1;

neer te zetten, dan krijg je een foutmelding (weet ff niet welke)

maar dat mag dus niet jammer maar helaas >:)
Pagina: 1