Problem z menu w programie.

macmika
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 13 gru 2010, o 23:53
Płeć: Mężczyzna
Lokalizacja: Wrocław

Problem z menu w programie.

Post autor: macmika »

Mam taki problem. A mianowicie. Gdy kompiluje swoj program, rozpoczyna sie on od takiego prostego menu. Tutaj jego kod:

Kod: Zaznacz cały

int main()
{
   
    int a;
    while(a!=0)
    {
               char ch;
               printf("Jaka operacje mam wykonac?\n");
               printf(" d - dodaj \n p - pokaz aktualna liste \n s - sortuj \n z - zakoncz \n");
               scanf("%c",&ch);
               switch (ch)
               {
                      case 'd': dodaj();
                              break;
                      case 'p': lista();
                              break;
                      case 's': sortuj();
                              break;
                      case 'z': a=0;
                                break;
                      }
I problem polega na tym, że powiedzmy wybiore d czyli dodaj, dodam to co chciałem to menu odpala sie podwojnie. Dodam, że przy pierwszym uruchomieniu programu menu odpala się tylko raz. Dopiero przy wyborze jakiejkolwiek opcji menu pojawia sie dwukrotnie. Widzicie tutaj jakiś błąd, czy może powinien on leżeć gdzieś w funkcjach? Dzięki. Pozdrawiam.
Ostatnio zmieniony 15 gru 2010, o 11:24 przez , łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
sonicwork
Użytkownik
Użytkownik
Posty: 67
Rejestracja: 3 wrz 2010, o 00:38
Płeć: Mężczyzna
Lokalizacja: Polska
Podziękował: 2 razy
Pomógł: 1 raz

Problem z menu w programie.

Post autor: sonicwork »

ja tu błędu nie widzę
masz coś jeszcze w funkcji main(), czy tylko nawiasu zamykającego nie wstawiłeś?
Czy zadeklarowałeś funkcje dodaj(), lista(), sortuj() przed funkcją main() ?
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

Problem z menu w programie.

Post autor: argv »

Kod: Zaznacz cały

#include <stdio.h>
#include <stdlib.h>

void dodaj(void) { } void sortuj(void) { } void lista(void) { }

int main(void)
{
    char ch;
    do
    {
        printf("Jaka operacje mam wykonac?\n");
        printf(" d - dodaj \n p - pokaz aktualna liste \n s - sortuj \n z - zakoncz \n");
        ch = getchar();
        fflush(stdin);
        switch (ch) {
            case 'd': dodaj();
                break;
            case 'p': lista();
                break;
            case 's': sortuj();
                break;
            case 'z': 
                break;
            default:
                printf("Nie ma takiej opcji\n");
                break;
        }
    }
    while(ch != 'z');
    return 0;
}
 
Twój problem leży w scanfie, zauważ że wciskając np "d" a po nim "enter", wpisujesz de facto dwa znaki, pętla się obraca i przetwarzany jest "enter". Na google znajdziesz jak to obejść, a na górze masz wersje z jakiegoś mojego starego programu z getchar+fflush - działa.
macmika
Użytkownik
Użytkownik
Posty: 14
Rejestracja: 13 gru 2010, o 23:53
Płeć: Mężczyzna
Lokalizacja: Wrocław

Problem z menu w programie.

Post autor: macmika »

A piszesz pod linuxem czy windowsem? Bo z tym fflush to różnica. Znasz jakiś sposób żeby to obejść? Dzięki. Pozdrawiam.

-- 14 gru 2010, o 23:13 --

Ok, użyłem po prostu getch() zamiast scanf. -- 15 gru 2010, o 23:31 --Witam mam jeszcze jedno takie pytanie apropo menu w c++. Czy jest możliwość, jeżeli tak to jak, wykonać takie menu jak np w biosie? Chodzi o to żeby wybór był podświetlony na biało. Pozdrawiam.
ODPOWIEDZ