Zdravím.
Mohl by mne prosím někdo pomoci a hlavně vysvětlit co dělám špatně. Můj cíl byl takový ,že si na začátku vytvořím strukturu OSOBA. Dále si vytvořím pole takovýchto struktur a pomoci for cyklu a funkce OSOBA pridej_osobu() je postupně naplním daty. Na závěr by běžela nekonečna smyčka pomocí switche by se jednotlivě vypisovaly. Jenže vznikl poblém pri tom naplnovaná daty ve for cyklu. Nevím proč ale prvni iterace proběhne v pořádku ale při druhé se vypíší dva printf najednou ,jakoby se přeskocila funkce (fgets(pom_pole, 25,stdin); ).... mohl by mě prosím někdo poradit proč to tak je???
Děkuji
/*
* Osoba.c
*
* Created on: 3. 11. 2016
* Author: Jokertwo
*/
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char jmeno[25];
int vek;
int vaha;
}OSOBA;
void tiskni_osobu(OSOBA *os);
OSOBA pridej_osobu();
int main(int argc, char **argv) {
/*
* pisu to v eclipsu a diky tomu nemusim
* vsude pouzivat fflush(stdout)
* pokud nekdo vite jak lepe opravit tuhle chybu
* budu jen rad
*/
setvbuf(stdout, NULL, _IONBF, 0);
setvbuf(stderr, NULL, _IONBF, 0);
int i,volba;
//pole struktur OSOBA
OSOBA postava[5];
//vytvoreni jednotlivych postav
for(i = 0; i < 5; i++){
postava[i] = pridej_osobu();
}
//nekonecna smycka
while(1){
printf("Vyber osobu :\n");
// pri zvoleni cisla pod kterou je nejaka postava
// se vypisou udaje o ni
//jinak se vypise hlaska ze "Takova postava neni"
switch (volba){
case 0 : tiskni_osobu(&postava[0]);
break;
case 1 : tiskni_osobu(&postava[1]);
break;
case 2 : tiskni_osobu(&postava[2]);
break;
case 3 : tiskni_osobu(&postava[3]);
break;
case 4 : tiskni_osobu(&postava[4]);
break;
default :
printf("Takova postava neni.");
}
}
return 0;
}
/*
* vytvori novou strukturu typu OSOBA
* a vrati ji
*/
OSOBA pridej_osobu(){
OSOBA pom;
char pom_pole[25];
int pom_vek,pom_vaha;
//pouze staticka promena zvysujici se s kazdym volanim teto funkce
static int cislo = 1;
printf("Zadejte jmeno %d. osoby \n",cislo);
fgets(pom_pole, 25,stdin);
printf("Zadejte vek %d. osoby \n",cislo);
scanf(" %d", &pom_vek);
printf("Zadejte vahu %d. osoby \n",cislo);
scanf(" %d", &pom_vaha);
//prepise znak na konci pole z '\n' na '\0'
pom_pole[strlen(pom_pole) - 2] = '\0';
//ulozi do pom.jmeno obsah pole pom_pole
strcpy(pom.jmeno, pom_pole);
pom.vek = pom_vek;
pom.vaha = pom_vaha;
//inkrementuje lokalni statickou pormenou
cislo++;
return pom;
}
/*
* vytiskne udaje o stukture OSOBA predane
* v parametrus
*
*/
void tiskni_osobu(OSOBA *os){
printf("Jmeno : %s\n", os->jmeno);
printf("Vek : %d\n", os->vek);
printf("Vaha : %d\n", os->vaha);
}