Wypełnianie bazy danych niepełnymi informacjami.

1

Mam strukturę:

struct Produkt {
    int id;
    char nazwa[20];
    char producent[20];
    int ilosc;
    int cena;
};

struct Element {
    struct Produkt dane;
    struct Element* nast;
};

Chciałbym stworzyć funkcję która pozwala użytkownikowi na wypełnienie danych o produkcie z możliwością wprowadzania niepełnych danych (np. nie wprowadzając ceny produktu).
Fragment programu który miałby pobierać te dane od użytkownika napisałem w podany niżej sposób:

    struct Produkt produkt;

    printf("Wprowadz id produktu: ");
    scanf("%d", &produkt.id);

    printf("Wprowadz nazwe produktu: ");
    scanf("%s", produkt.nazwa);

    printf("Wprowadz producenta produktu: ");
    scanf("%s", produkt.producent);

    printf("Wprowadz ilosc produktu ");
    scanf("%d", &produkt.ilosc);

    printf("Wprowadz cene produktu: ");
    scanf("%d", produkt.cena);

Problem jest taki że program wymaga aby użytkownik podał wszystkie dane. Chciałbym żeby użytkownik mógł nie wprowadzać jakiś danych (w takim przypadku użytkownik zostawiałby puste pole). Jak wygląda rozwiązanie tego problemu? Myślałem nad tym że może należy użyć polecenia fgets() ale czy zadziała ono w przypadku liczb całkowitych?

1

A w czym dokładnie jest problem?

3
printf("Wprowadz id produktu (* - pomiń): ");
if(scanf("%d", &produkt.id)!=1) produkt.id=-1;
while(getchar()!='\n') {}

Jak robisz coś metodą Kopiego Pejsta to zastanów się czy nie zrobić funkcję:

void ignore(char till) { while(getchar()!='\n') {} }

void ask_int(const char *msg,int *value,int dflt)
{
    printf("Wprowadz %s (* - pomiń): ",msg);
    if(scanf("%d",value)!=1) *value=dflt;
    ignore('\n');
}

void ask_str(const char *msg,char *buff,int capacity,const char *dflt)
{
    char fmt[16];
    printf("Wprowadz %s (<enter> - pomiń): ",msg);
    sprintf(fmt,"%%%ds",capacity-1);
    if(scanf(fmt,buff)!=1) strcpy(value,dflt);
    ignore('\n');
}

{
    struct Produkt produkt;
    ask_int("id produktu",&produkt.id,-1);
    ask_str("nazwe produktu",produkt.nazwa,20,"---");
    ask_str("producenta produktu",produkt.producent,20,"---");
    ask_int("ilosc produktu",&produkt.ilosc,0);
    printf("cene produktu",&produkt.cena,0);
}

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