Portál AbcLinuxu, 12. května 2025 06:34
Řešení dotazu:
void ctiTyp(typPracovnika typ) { int volba = 0; printf("Zadej typ pracovnka (1 = Administrativni, 2 -Vykonny): \n"); scanf("%d", volba); switch (volba) { /* tady je nakej problemRekl bych, ze to je tim, ze se snazis zmenit hodnotu promenne typ, ktera je vstupnim argumentem funkce. Navrhuji vratit hodnotu pomoci return, nebo pres ukazatel. Tomas*/ case 1: typ = ADM; break; case 2: typ = EXEC; break; default: printf("spatna volba, pracovnik bude vytvoren jako aministrativni\n"); break; } }
void funkce (int* cislo) { ... } int a = 3; funkce (&a); // tato funkce muze manipulovat s hodnotou aPripadne takto:
int funkce (int cislo) { ... } int a = 3; a = funkce (a);Jinak, takhle bych to zrovna nedelal. To zase neni problematika daneho jazyka, ale navrhu programu - napriklad Dokonaly kod od Mcconella. Zde urcite neni spravne nacitat jmeno a prijmeni uvnitr funkce pro vytvoreni pracovnika.
/* vytvoreni pracovnika */ pracovnik vytvorPracovnika(int id) { pracovnik pomocnyPracovnik; pomocnyPracovnik.id = id; /* volani metod, ktere nactou jmeno a prijmeni a typ*/ ctiJmeno(pomocnyPracovnik.jmeno); ctiPrijmeni(pomocnyPracovnik.prijmeni); pomocnyPracovnik.typ = ctiTyp(); return pomocnyPracovnik; }
int volba = 0;
...
scanf("%d", volba);
Ak formátovací reťazec scanf obsahuje %d, tak ako argument sa očakáva pointer na int a nie int. Teda správne má byť:
scanf("%d", &volba);
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.