Struktury danych - listy

0

Witam mam taki mały problem otóż w mojej strukturze po wywołaniu w menu funkcje dodawania kolejnego rekordu i dodaniu tegoż rekordu funkcja kończy swoje działanie to nie mogę od razu wywołać innej funkcji tylko muszę kliknąć enter żeby while jeszcze raz jakby przeleciał i dopiero wszystko działa poprawnie. Problem ten występuje tylko w funkcjach które dokonują edycji struktury.

Fragmenty kodu ;

Sklep* stworz_element()
{
    char x;//x zmienna pomocnicza
    Sklep *element;

    char bufor1[41], bufor2[41];
    char *miejscowosc, *branza;
    long int *numer;
    int *liczba_p, *godzina_o, *godzina_z;

    system("cls");

    printf("Podaj miejscowosc: ");
    gets(bufor1);
    miejscowosc=(char*)malloc(sizeof(char)* (strlen(bufor1)+1));
    strcpy(miejscowosc, bufor1);

    printf("Podaj branze: ");
    gets(bufor2);
    branza=(char*)malloc(sizeof(char)* (strlen(bufor2)+1));
    strcpy(branza, bufor2);

    printf("Podaj numer sklepu: ");
    while(scanf("%ld", &numer)==0)
    {
        puts("Blad danych, podaj numer jeszcze raz");
    }

    printf("Podaj liczbe pracownikow: ");
    while(scanf("%d", &liczba_p)==0)
    {
        puts("Blad danych, podaj numer jeszcze raz");
    }

    printf("Podaj godzine otwarcia: ");
    while(scanf("%d", &godzina_o)==0)
    {
        puts("Blad odczytu, podaj numer jeszcze raz");
    }

    printf("Podaj godzine zamkniecia: ");
    while(scanf("%d", &godzina_z)==0)
    {
        puts("Blad odczytu, podaj numer jeszcze raz");
    }

    element=(Sklep*)malloc(sizeof(Sklep));
    element->next=NULL;
    element->dane.numer=numer;
    element->dane.miejscowosc=miejscowosc;
    element->dane.branza=branza;
    element->dane.liczba_p=liczba_p;
    element->dane.godzina_o=godzina_o;
    element->dane.godzina_z=godzina_z;

    return element;
}

//Dodawanie na pocz¹tek listy
void dodaj_sklep(Sklep **head)
{
    Sklep *tmp = stworz_element();

    if (*head != NULL)
        tmp->next = *head;
    *head = tmp;
}

void menu(Sklep *head)
{
    char i;

    do
    {
        system("cls");
        printf("1. Dodaj sklep do bazy.\n");
        printf("2. Wyszykaj sklep o podanym numerze.\n");
        printf("3. Wyszukaj sklepy o podanej liczbie pracownikow.\n");
        printf("4. Wyszukaj sklepy o podanych godzinach otwarcia.\n");
        printf("5. Wyszukaj sklepy znajdujacy sie w podanej miejscowosci.\n");
        printf("6. Wyswietl liste branzowa\n");
        printf("7. Usun liste\n");
        printf("8. Usun wybrany sklep z bazy\n");
        printf("0. Wyjscie\n\n");
        printf("Twoj wybor: ");
        i = getchar();
        getchar();
        if (i == '1') dodaj_sklep(&head);
        else if (i == '2') wyswietl_element_numer(head);
        else if (i == '3') wyswietl_element_liczba_p(head);
        else if (i == '4') wyswietl_element_godziny(head);
        else if (i == '5') wyswietl_element_miejscowosc(head);
        else if (i == '6') wyswietlanie_listy(head);
        else if (i == '7') usun_liste(&head);
        else if (i == '8') usuwan_wybrany_element(&head);
    } while (i != '0');
}
 
0
  1. nie używaj gets
  2. mieszasz wejścia formatowane i nieformatowane, więc przeanalizuj czy gdzies nie potrzeba dodatkowego czyszczenia bufora
  3. potrzebujesz 2 enterów, gdyż
 i = getchar();
getchar(); 

ten fragment czyta 2 znaki

1 użytkowników online, w tym zalogowanych: 0, gości: 1