[c] Een goede menu opzet vraag

Pagina: 1
Acties:

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Ik wil een menu maken waarbij de gebruiken een letter ingeeft en geen nummer.

Ik heb get volgende gemaakt

C:
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
/* INCLUDES: */
#include <stdio.h>

/* DEFINES: */
#define A 1
#define B 2

/* MAINPROGRAM: */
int main(void) {
    char menu;
    int keuze;

    printf("Kies een van de menu optie's: ");
    scanf("%c", &menu);
    if(menu == 'A'){
        keuze = A;
        printf("keuze: %d ",keuze);
    } else if(menu == 'B'){
        keuze = B;
    } else {
        keuze = 0;
    }

    switch (keuze) {
        case A:
            printf("Keuze A\n");
            break;
        case B:
            printf("Keuze B\n");
            break;
        default:
            printf("Keuze was niet A of B!\n");
    }
    return 0;
}


Ik heb het idee dat ik dit helemaal niet handig doe, zijn er misschien mensen die tips cq voorbeelden hebben.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
Tja, je kunt in dit voorbeeld net zo goed die case op het ingevoerde karakter definiëren:


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
scanf("%c", &menu);
switch (menu)
{
case 'a':
case 'A':
    printf("Keuze A\n");
    break;
case 'b':
case 'B':
    printf("Keuze B\n");
    break;
default:
    printf("Keuze was niet A of B!\n");
}

  • Neptunus
  • Registratie: Januari 2001
  • Laatst online: 16-05 13:27
Soultaker schreef op vrijdag 19 november 2004 @ 16:22:
Tja, je kunt in dit voorbeeld net zo goed die case op het ingevoerde karakter definiëren:


C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
scanf("%c", &menu);
switch (menu)
{
case 'a':
case 'A':
    printf("Keuze A\n");
    break;
case 'b':
case 'B':
    printf("Keuze B\n");
    break;
default:
    printf("Keuze was niet A of B!\n");
}
Was wel aan het spelen geweest om een char in een char te zetten. Maar kreeg steeds vage error's. Krijg je als je de ' ' vergeet.

Maar zijn er ook nog andere mooie manieren om een mooi menu te maken. Ben er eens benieuwt hoe de meesten het doen?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

Ik zou zoiets doen:

C:
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
38
39
40
41
42
typedef void (*menuhandler_t) (struct menuitem_s * item, void * privatedata);

typedef struct menuitem_s
{
    char hotkey;
    char * text;
    menuhandler_t handler;
} menuitem_t;

void showmenu (menuitem_t * items, int count, void * privatedata)
{
    /*
        Laat hier de menu's zien en reageer op de knoppen.
        Als een knop van een bepaald menu-item ingedrukt is
        roep je de handler aan
    */
}


void zegiets (menuitem_t * item, void * privatedata)
{
    printf ("U heeft gekozen voor: %s\n", item->text);
}

void stop (menuitem_t * item, void * privatedata)
{
    (*(int *)privatedata) = 1;
}


int main ()
{
    menuitem_t mymenu[] =
    {
        { 'z', "Zeg iets", zegiets },
        { 's', "Stop", stop }
    };

    int stoppressed = 0;
    while (!stoppressed)
        showmenu (mymenu, 2, &stoppressed);
};

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15-05 06:45
(.oisyn: misschien is een beetje toelichting wel aardig, anders wordt het zo'n opsomtopic.)

  • JayTaph
  • Registratie: Oktober 1999
  • Laatst online: 28-11-2025

JayTaph

Portability is for canoes.

offtopic:
Over kanon gesproken zeg..


Verder:

Je gaat er nu vanuit dat er 2 case's in voorkomen: A of B. Dit omdat je bij de default de error 'geen A of B' tevoorschijn toverd. Je zult dus geneigd zijn om wel nieuwe cases toe te voegen (C, D en E), maar daarbij zal je snel het aanpassen van de default over het hoofd zien.

Anders gezegd: je wilt niet continue je default aanpassen als je een extra optie toevoegd, dus zou ik kiezen voor een tekst zoals: "unjuiste keuze" in plaats het huidige.

Yo dawg, I heard you like posts so I posted below your post so you can post again.


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

Hmm vaag, ik heb vanmiddag een toelichting gepost maar nu staat ie er niet :?
Kom ik later nog op terug :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1