[c++] sluiten van programma

Pagina: 1
Acties:
  • 111 views sinds 30-01-2008

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Hoe kan ik als ik als keuze 5 neem dat hij het programma volledig sluit?
(volgens kameraden zou dit niet werken... search leverde niks op)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void main()
{
    int keuze;
    cout<<"1. Nieuw bestand maken \n";
    cout<<"2. Bijwerken van bestand \n";
    cout<<"3. Zoeken naar gegevens \n";
    cout<<"4. Toon alle ingevoerde gegevens \n";
    cout<<"5. Afsluiten \n";
    cin>>keuze;
    switch (keuze)
    {
    case 1: NieuwBestandMaken();break;
    case 2: BijwerkenBestand();break;
    case 3: ZoekenBestand();break;
    case 4: AfdrukkenGegevens();break;
    case 5: 
    }
}

  • LAN
  • Registratie: Oktober 2000
  • Niet online

LAN

code:
1
2
3
4
5
6
7
8
9
int main(void)
{

  switch(bla)
  etc, etc
  case 4:
  case 5:
    return  0;
}

zoiets?

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Op zaterdag 15 juni 2002 14:08 schreef LAN het volgende:
code:
1
2
3
4
5
6
7
8
9
int main(void)
{

  switch(bla)
  etc, etc
  case 4:
  case 5:
    return  0;
}

zoiets?
euhm... ik heb nog maar een jaar c++ achter de rug, zou het mogelijk zijn een beetje uitleg te geven daarbij... :?
bedankt voor de moeite

Verwijderd

volgens kameraden zou dit niet werken
Hebben zij wel goed gekeken?!?! Want afsluiten, hij doet!

[opmerking]
het verschil tussen int main en void main is dat de eerste een return-code terug geeft aan de aanroeper (zoals bijvoorbeeld de shell). Bijvoorbeeld 0 betekend vaak een goed einde en -1 een einde door een fout.
In jouw geval maakt het niet uit.

In je integer komt iets uit de invoer te staan. Als je bij de switch aankomt, dan kom je of in het stukje bij case 5 terecht, of je valt uit het switch block. In beide gevallen kom je bij het einde van main en is het programma afgelopen.

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Op zaterdag 15 juni 2002 14:12 schreef lnfinitive het volgende:

[..]

Hebben zij wel goed gekeken?!?! Want afsluiten, hij doet!
ik wist dat ik op hun niet moest verdergaan, daarmee dat ik het hier vraag.

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
is het dan mogelijk dat ik de melding: druk op een toets om verder te gaan niet meer krijg?

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Op zaterdag 15 juni 2002 14:12 schreef lnfinitive het volgende:

[..]

Hebben zij wel goed gekeken?!?! Want afsluiten, hij doet!

[opmerking]
het verschil tussen int main en void main is dat de eerste een return-code meegeeft. Bijvoorbeeld 0 betekend vaak een goed einde en -1 een einde door een fout.
In jouw geval maakt het niet uit.

In je integer komt iets uit de invoer te staan. Als je bij de switch aankomt, dan kom je of in het stukje bij case 5 terecht, of je valt uit het switch block. In beide gevallen kom je bij het einde van main en is het programma afgelopen.
ok, wat ik niet wist was dat je van een void main() een int kon maken...
bedankt voor je reactie

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main(int argc, char* argv[])
{

    int keuze;

        cout<<"1. Nieuw bestand maken \n";
        cout<<"2. Bijwerken van bestand \n";
        cout<<"3. Zoeken naar gegevens \n";
        cout<<"4. Toon alle ingevoerde gegevens \n";
        cout<<"5. Afsluiten \n";
        cin>>keuze;

        switch (keuze) {
              case 1:
                NieuwBestandMaken();
                break;

            case 2:
                BijwerkenBestand();
                break;

            case 3:
                ZoekenBestand();
                break;

            case 4:
                AfdrukkenGegevens();
                break;

            case 5:
            default:
                exit( 0 );
                break;
      }

      return 0;
}

Je kan ook bij case5, default niets doen en hem gewoon naar de return 0 laten flowen
Op zaterdag 15 juni 2002 14:11 schreef BlackShadow het volgende:
euhm... ik heb nog maar een jaar c++ achter de rug, zou het mogelijk zijn een beetje uitleg te geven daarbij... :?
bedankt voor de moeite
Nog maar een jaar :? Dit zou je binnen een week moeten weten :+
Echter met je void main( ) kan dit gewoon ook. Hij sluit dan ook gewoon de main functie af en exit dan ook die thread.
Die errorcode is alleen maar nuttig voor de shell, dat er gekeken kan worden of het programma correct afgesloten is.

Over dat 'bevestigingsscherm': Zoek even in de help van je IDE. Dan heb je het in 3 minuten voor elkaar

  • LAN
  • Registratie: Oktober 2000
  • Niet online

LAN

Op zaterdag 15 juni 2002 14:14 schreef BlackShadow het volgende:
is het dan mogelijk dat ik de melding: druk op een toets om verder te gaan niet meer krijg?
Ik verwacht dat je em vanuit visual c++ start.
Start de exe file eens vanuit explorer, dan zul je zien dat je de "press any key to continue" niet meer krijgt.

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Op zaterdag 15 juni 2002 14:14 schreef BlackShadow het volgende:
is het dan mogelijk dat ik de melding: druk op een toets om verder te gaan niet meer krijg?
is eerder windows dan c++ denk ik...

Cogito Ergo Credo


  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 04-09 21:51

PromWarMachine

Forsaken Archer

In een do while lus stoppen ;)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
do
    {
    gotoxy(25,5); cout << "HOOFDMENU BOWLINGBAAN";
    gotoxy(25,8); cout << "1. Speel het spel tegen de computer";
    gotoxy(25,9); cout << "2. Speel het spel tegen een speler";
    gotoxy(25,11); cout << "3. Highscore";
    gotoxy(25,13); cout << "4. Help";
    gotoxy(25,15); cout << "Druk ESC om het spel te beeindigen" << endl;

    
    ch = getch();
    
    } while (ch!='1' && ch!='2' && ch!='3' && ch!='4' && ch!=27);

Daarna in je case statement 27 naar return 0 laten verwijzen! 27 is je ESC key btw

Zo vang je ook meteen af, dat als men een andere toets invoerd, dan dat de menu keuze is, dat er nix gebeurd. Anders volgt een foutmelding, staat niet zo mooi.

Uitleg bij return 0? Als je bij het begin van je programma int main(); zegt, betekent dat, dat de functie die je dan maakt een variabele terug verwacht, die geef je terug met return aan de functie die de functie aanriep! Aangezien geen enkele functie jouw functie main aanroept, zal het programma afgesloten worden.

Daarom zet je ook altijd helemaal onderaan je programma return 0;. Maar dit kun je ook eerder zetten, bijvoorbeeld als je het programma hardhandig op een ander tijdstip wilt afbreken, zoals nu.

Dividend for Starters


  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Op zaterdag 15 juni 2002 14:18 schreef PromWarMachine het volgende:
In een do while lus stoppen ;)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
do
    {
    gotoxy(25,5); cout << "HOOFDMENU BOWLINGBAAN";
    gotoxy(25,8); cout << "1. Speel het spel tegen de computer";
    gotoxy(25,9); cout << "2. Speel het spel tegen een speler";
    gotoxy(25,11); cout << "3. Highscore";
    gotoxy(25,13); cout << "4. Help";
    gotoxy(25,15); cout << "Druk ESC om het spel te beeindigen" << endl;

    
    ch = getch();
    
    } while (ch!='1' && ch!='2' && ch!='3' && ch!='4' && ch!=27);

Daarna in je case statement 27 naar return 0 laten verwijzen! 27 is je ESC key btw

Zo vang je ook meteen af, dat als men een andere toets invoerd, dan dat de menu keuze is, dat er nix gebeurd. Anders volgt een foutmelding, staat niet zo mooi.
kan allemaal werken, maar ik vind het simpeler om het dan via de return te doen, want van while (ch!='1' && ch!='2' && ch!='3' && ch!='4' && ch!=27); en gotoxy(25,11); versta ik niks :)

  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 04-09 21:51

PromWarMachine

Forsaken Archer

Op zaterdag 15 juni 2002 14:21 schreef BlackShadow het volgende:

[..]

kan allemaal werken, maar ik vind het simpeler om het dan via de return te doen, want van while (ch!='1' && ch!='2' && ch!='3' && ch!='4' && ch!=27); en gotoxy(25,11); versta ik niks :)
Goed, die leg ik ook ff uit :)

Hiermee zet hij het menu op het scherm, zolang de keuze die jij invoert, ongelijk is aan een van die keuzes.

Hij gaat dus alleen verder als jij een 1, een 2, een 3, een 4 of een escape geeft. Dit is ook de bedoeling, want keuze 6 is bij jou nix. Voer in jouw programma maar eens bij die cin>>keuze; een 6 in. Dan gaat 'ie zeuren. Bij mij kán dat niet eens ;) Mooi toch?

ch=getch(); = Wachten tot een letter wordt ingegeven en die in ch stoppen. Da's een betere versie dan cin>> omdat je bij cin>> een enter moet geven en bij getch(); niet, snap je het nog? :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
int main()
{
int keuze;
  do
  {
    cout<<"1. Nieuw bestand maken \n";
    cout<<"2. Bijwerken van bestand \n";
    cout<<"3. Zoeken naar gegevens \n";
    cout<<"4. Toon alle ingevoerde gegevens \n";
    cout<<"ESC. Afsluiten \n";

    keuze=getch();

  } while (ch!='1' && ch!='2' && ch!='3' && ch!='4' && ch!=27);
    
      switch (keuze)
    {
    case 1: NieuwBestandMaken();break;
    case 2: BijwerkenBestand();break;
    case 3: ZoekenBestand();break;
    case 4: AfdrukkenGegevens();break;
    case 27: return 0;
    }

}

Zo wordt het dan!

Als finishing touch: Die gotoxy(25,11); doet niets anders dan de cursor op x-positie 25 en y-positie 11 te zetten. Zo kun je je menuutje mooi in het midden zitten.

Zoals je misschien weet is het scherm in DOS 80x24 oid.


/edit
ARgh, geen UBB in [code]

Dividend for Starters


Verwijderd

als je dan toch zoiets doet, gebruik dan minstens iets als:
code:
1
2
3
4
5
6
7
8
9
10
11
#define ESCAPE_KEY 27
#define CHOICE1 1
#etc

while (!isMenuKey(ch)) 
...

int isMenuKey(char key)
{
    return key == ESCAPE_KEY || key== CHOICE1 || ...;
}

Dat maakt het in ieder geval een stuk leesbaarder.

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
:D Kom op zeg. Volgens mij zit hier iemand heeeeeeel erg te liegen met z'n 1 jaar C++ ervaring >:)

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Op zaterdag 15 juni 2002 14:26 schreef PromWarMachine het volgende:

[..]

Goed, die leg ik ook ff uit :)

Hiermee zet hij het menu op het scherm, zolang de keuze die jij invoert, ongelijk is aan een van die keuzes.

Hij gaat dus alleen verder als jij een 1, een 2, een 3, een 4 of een escape geeft. Dit is ook de bedoeling, want keuze 6 is bij jou nix. Voer in jouw programma maar eens bij die cin>>keuze; een 6 in. Dan gaat 'ie zeuren. Bij mij kán dat niet eens ;) Mooi toch?

ch=getch(); = Wachten tot een letter wordt ingegeven en die in ch stoppen. Da's een betere versie dan cin>> omdat je bij cin>> een enter moet geven en bij getch(); niet, snap je het nog? :)
yep, dus bij ch=getch(); kan je geen 2 tekens ingeven

  • BlackShadow
  • Registratie: Februari 2002
  • Laatst online: 05-09 00:29
Op zaterdag 15 juni 2002 14:32 schreef Glimi het volgende:
:D Kom op zeg. Volgens mij zit hier iemand heeeeeeel erg te liegen met z'n 1 jaar C++ ervaring >:)
?? waarom dan?
ik zit in het 5e jaar informatica, aangezien het het einde is van dat jaar en we (maar) 5uur c++ op een week hebben komt dat zelfs nog niet op een jaar :P

  • LAN
  • Registratie: Oktober 2000
  • Niet online

LAN

Op zaterdag 15 juni 2002 14:35 schreef BlackShadow het volgende:

[..]

?? waarom dan?
Omdat dit namelijk heel erg basic spul is wat je nu vraagt.
Neemt niet weg dat we het niet willen antwoorden, ik bedoel, vraag maar raak.
Misschien is een studieboek c++ een goede investering voor je.

  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 04-09 21:51

PromWarMachine

Forsaken Archer

Op zaterdag 15 juni 2002 14:34 schreef BlackShadow het volgende:

[..]

yep, dus bij ch=getch(); kan je geen 2 tekens ingeven
Je hebt het door ;)
Dat was toch ook niet de bedoeling?

Ik heb heel vaak ge-edit dus pas op als je aan het kopieren/plakken bent :) Hij zou zo iig goed moeten zijn, als je errors krijgt, post het gewoon. Bij de weg, ik heb het ook nog maar een jaartje hoor ;)

En we moesten nu al een %$$% project inleveren. Bah, ben ik LANG mee bezig geweest, nu nog trauma's >:) Maar back ontopic :+

Dividend for Starters


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Waarom snap ik de gegeven voorbeelden wel, met mijn 4e jaar informatica ZONDER echte c++ ervaring? ;)

Oftewel, ga eens bij jezelf te rade over je kennis en neem wat c++ boeken door.
Dat je sommige calls niet kent, moet niet uitmaken voor het feit dat je de gegeven code wel hoort te snappen (na 5 jaar informatica zeker!!)

[edit]
Het slotje is trouwens voor het ombouwen van GoT tot je persoonlijke helpdesk voor dit probleem.
Elk stukje simpele code uit laten leggen terwijl je al een jaar C++ kan...
Pagina: 1

Dit topic is gesloten.