Pomijanie instrukcji po pozostawieniu pustego pola w scanf

0

Witam. Mam do napisania program zaliczeniowy, który pełni funkcje biblioteki dla tytułów książek i jedną z jego funkcji jest edycja danych dodanych wcześniej tytułów. Problem pojawia się przy opcji, że gdy nie wpiszę nic w polu edycji (tylko enter) to funkcja nie zmieni danego pola (np. imie, czy tytul). Nie mam już pomysłów jak to zrealizować. Próbowałem już z strcmp ale coś mi nie wyszło :(

 void edit(){
    int x;
    char aut_i[20];
    char aut_n[20];
    char kateg[20];
    bool powo = false;
    char tit[30];
    system("cls");
    printf("---===LIBRARER ~ Edytuj===---\n\n");
    printf("1. Edytuj po tytule\n2. Edytuj po ID\n\n3. Powrot do Menu\n\n");
    x = getCommand();
    switch(x){
        case 1: system("cls");
            printf("---===LIBRARER ~ Edytuj===---\n\n");
            printf("Podaj tytul do edycji: ");
            scanf("%[^\n]", tit);
            if(!strcmp(tit, (*head).title)){
                powo = true;
                cos = head;
            }
            else if(!strcmp(tit, (*tmp).title)){
                powo = true;
                cos = tmp;
            }
            else{
                cos = (*head).next;
                while(cos){
                    if(!strcmp(tit, (*cos).title)){
                        powo = true;
                        break;
                    }
                    cos = (*cos).next;
                }
            }
            if(cos){
                printf("\nEdytujesz: \"%s\"\n\n", tit);
                getchar();
                printf("Imie: ");
                scanf("%[^\n]", aut_i);
                if(aut_i == "");
                else{
                    strcpy((*cos).aut_imie, aut_i);
                }
                getchar();
                printf("Nazwisko: ");
                scanf("%[^\n]", aut_n);
                if(aut_n == "");
                else{
                    strcpy((*cos).aut_nazw, aut_n);
                }
                printf("Tytul: ");
                getchar();
                scanf("%[^\n]", tit);
                if(tit == "");
                else{
                    strcpy((*cos).title, tit);
                }
                printf("Kategoria: ");
                getchar();
                scanf("%[^\n]", kateg);
                if(kateg == "")
                    printf("Bez zmian");
                else{
                    strcpy((*cos).kategoria, kateg);
                }
            }
            else
                printf("\n\n Brak ksiazki o podanym tytule...");
            system("pause");
            break;
        case 2:
            break;
        case 3:
            break;
        default: printf("Blad! Zostaniesz przeniesiony do Menu...");
            system("pause");
            break;
    }
    menu();
}
1

scanf wtedy zwraca wartość 0

   char tit[30];
   if(!scanf("%29[^\n]",tit)) *tit=0;
   printf("\"%s\"",tit);
1

Hint dla Ciebie: operator ->

0

@_13th_Dragon wielkie dzięki, nie wiedziałem, że pusty scanf zwraca 0 :)
@pingwindyktator proszę wybacz moją niewiedzę, ale nie wiem jak zrozumieć tą podpowiedź ;c

2
Mihauke napisał(a):

@pingwindyktator proszę wybacz moją niewiedzę, ale nie wiem jak zrozumieć tą podpowiedź ;c

Cztery zapisy oznaczające to samo

(*head).title
head[0].title
0[head].title
head->title
0

Zapamiętam to sobie w takim razie ;) Jeszcze raz wielkie dzięki.

@Edit
A jeszcze takie pytanko. W strukturze Book mam zadeklarowane tablice i dodatkowo jeszcze jedną strukturę Data, w której mieszczą się 3 zmienne przechowujące date wypożyczenia. W jaki sposób mam przypisać do tych pól wartości, bo próbowałem w ten sposób cos->data.dzien = x; ale wywala mi error: invalid use of 'struct Book::data'?
@_13th_Dragon

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