Szóval akkor hogy lenne érdemes "átláthatóbbá" tenni egy programot?
Kiírtam egy kérdést nemrég,de még mindig nem tudom,mit kéne csinálnom
Az első része a programnak az,hogy bekérek egy számot,aztán ez alapján különféle változóknak adok bizonyos értékeket+ még szintén a szám alapján kiíratok bizonyos dolgokat,itt a kép
ha csak simán beírom a mainbe(ami a voidban van),akkor nyílván nincs semmi gond(mert előtte deklarálva vannak a változók),de azt nem tudom megcsinálni,hogy ez ott van a main előtt,és bele meg csak annyit írok,hogy faj();
szóval akkor azt nem lehet megoldani,hogy a mainben csak 1 sort használva ezt "odajuttassam"(ami a voidban van kb 20 sor)?
valahogy így,csak nem igazán értem a függvények működését
"Kötekedés az még mindig jól megy"
Brávó. Kötekedés, hogy a működőképesség minimumát várjuk egy publikált programtól. Amelyik szerinted már csupán holmi átláthatóvá tevést igényel...
Hányszor sikerült lefordítanod? Hányszor futtattad másképp megoldva? A C-fordítóprogramnak leszel szíves beszólogatni, az tehet az egészről.
Csak azt a sok rohadt kötekedést ne kellett volna elviselni magamtól! Minek kell a kákán is csomót keresnem? Micsoda undorító egy természetem van...
Jajj "tabaki", talán ennyire nem kellett volna elvenned a kedvét az egész programozástól! :-)
Amikor kiskoromban gép elé ültem én is hasonló kódokat csináltam, najó azok éppen működtek is, de iszonyat sok redundancia volt bennük... ...aztán ezt kinőttem.
Még ma is néha nosztalgiából belenézek az ősrégi kódjaimba, és néha megrémít milyen emberfeletti munkát öltem bele egy-egy témába... :-)
A kérdező szerintem érdeklődik egy bizonyos játék iránt és ez arra ösztökélte, hogy megpróbáljon önszántából csinálni "valami hasonlót", ez dicséretes... ...az ihlet megvolt, csak a kivitelezés várat magára, így megkérdezte, hogyan tovább... Ti meg egy WarCraft-ot vártok tőle... :-)
@#13:
Hogy Kérdező is tisztában legyen a ténnyel: Nem vagyok programozó. Sőt: Hétvégi programozónak is elég gyenge vagyok. Mi több: Pascalban programozok, és nekem a C majdhogynem kínaiul van. Bőven van rá okom tehát, hogy ne tanúsítsak a lelki habitusommal amúgy is ellentétes könyörtelenséget. Igen, tökéletesen megértem, és most a C-t előszedve át is élem a szárnypróbálgatás nehézségeit.
Azonban...
„másfél hónap programozás után ti biztos mindent tudtatok”
Annyit egy negyedóra alatt is megtanultam, hogy egy változóra szükség van ahhoz, hogy értéket kaphasson. Nem a Warcraftot várnám el, hanem azt, hogy Kérdező ne írjon meg egy fél játékot, amíg egyetlen működőképes beolvasást-kiírást nem tud felmutatni.
Az talán fölösleges komiszkodás volt a részemről, hogy a puszta futtatási eredménnyel hergeltem. Tisztességesebb, ha közlöm a kísérleteimet -- legalább a profiknak is szerzek egy kis mulatságot:
Ez nagyjából az, amit Kérdező próbált megoldani:
#include <stdio.h>
#include <string.h>
int faj1;
float E, T, V;
char faj2[6];
void fajKiiras(){
printf("A jatekos karaktere egy %s harcos, akinek\n\t"
"eletereje %.1f,\n\tvedelme %.1f,\n\ttamadasa %.1f.\n", faj2, E, V, T);
}
void faj(){
printf("Add meg a karakter fajat: ");
scanf("%d", &faj1);
while((faj1 < 1) || (faj1 > 4)){
printf("Adj meg egy ervenyes szamot!\n");
scanf("%d", &faj1);
}
printf("\n");
switch(faj1){
case 1:
E = 10.0;
T = 10.0;
V = 4.0;
strcpy(faj2,"ember\0");
break;
case 2:
E = 6.0;
T = 12.0;
V = 6.0;
strcpy(faj2,"tunde\0");
break;
case 3:
E = 6.0;
T = 8.0;
V = 10.0;
strcpy(faj2,"torp\0");
break;
case 4:
E = 8.0;
T = 14.0;
V = 2.0;
strcpy(faj2,"ork\0");
break;
}
fajKiiras();
}
int main(){
faj();
return 0;
}
Ez meg ahogyan egyelőre nekem sikerült átbarkácsolni:
#include <stdio.h>
#include <string.h>
int faj1;
struct fajAdat{
char melyik[6];
float e, v, t;
};
struct fajAdat fajok[4] = {
{"ember\0", 10.0, 4.0, 10.0},
{"tunde\0", 6.0, 6.0, 12.0},
{"torp\0", 6.0, 10.0, 8.0},
{"ork\0", 8.0, 2.0, 14.0}
};
void fajKiiras(int i){
printf("A jatekos karaktere egy %s harcos, akinek\n\t"
"eletereje %.1f,\n\t"
"vedelme %.1f,\n\t"
"tamadasa %.1f.\n",
fajok[i].melyik, fajok[i].e, fajok[i].v, fajok[i].t);
}
void faj(){
printf("1 = ember\n2 = tunde\n3 = torp\n4 = ork\n\n");
printf("Add meg a karakter fajat: ");
scanf("%d", &faj1);
while((faj1 < 1) || (faj1 > 4)){
printf("Ervenyes szamot adj meg! ");
scanf("%d", &faj1);
}
faj1--;
printf("\n");
fajKiiras(faj1);
}
int main(){
faj();
return 0;
}
Valahogy így nézzen ki a struktúra:
* * * * * * * * * * * * * * * * * * * *
struct FajDefinicio {
const char* nev;
const float eletero;
const float vedelem;
const float tamadas;
};
typedef enum {
EMBER,
TUNDE,
TORP,
ORK
} Faj;
struct FajDefinicio fajok[] = {
{"ember", 10.f, 10.f, 4.f},
{"tunde", 6.f, 12.f, 6.f},
{"torp", 6.f, 8.f, 10.f},
{"ork", 8.f, 14.f, 2.f}
};
* * * * * * * * * * * * * * * * * * * *
Majd van egy main():
* * * * * * * * * * * * * * * * * * * *
Faj kivalasztottFaj = beolvas();
kiir(kivalasztottFaj);
//stb
* * * * * * * * * * * * * * * * * * * *
Beolvasás elég egyszerű mindenféle körítés nélkül:
* * * * * * * * * * * * * * * * * * * *
printf("Válassz ki egy fajt (1-4)\n");
while (1) {
unsigned bemenet;
scanf("%d", &bemenet);
if (bemenet >= 1 && bemenet <= 4)
return (Faj) (bemenet - 1);
printf"Nem sikerült, próbáld újra");
}
* * * * * * * * * * * * * * * * * * * *
Kiírás:
* * * * * * * * * * * * * * * * * * * *
printf("nev: %s, eletero: %f, vedelem: %f, tamadas: %f\n",
fajok[faj].nev, fajok[faj].eletero, fajok[faj].vedelem, fajok[faj].tamadas);
* * * * * * * * * * * * * * * * * * * *
Eddig még nem volt szükség if-ekre meg switchre de ha kellene:
* * * * * * * * * * * * * * * * * * * *
switch(kivalasztotFaj) {
case EMBER:
// blah blah
break;
case TUNDE:
(...)
}
* * * * * * * * * * * * * * * * * * * *
Próbáljuk kerülni az if-létrákat és a switcheket. Általában rosszul strukturált kódra vall. Ami ennél is fontosabb: kerüljük a kódismétlést, ha van közös kód, emeljük ki.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!