ako nacrtol uz vitamin, ostal by som v tej bitovej "vrstve"...ziadne modulo alebo podobne, stacia len bitove posuny a &...
ukladat to alebo priamo vypisovat by nemal byt problem, nejake sposoby tu uz su...
Příspěvky odeslané z IP adresy 147.229.206.–
Diskuze věnovaná jazykům C a C++.
Vlákna o C# patří do diskuze .NET.
#include <stdio.h>
//easy: ak je znak v poriadku vrati jeho hodnotu, inak vrati nulu
int isKQV(int znak) {
if (znak == 'K' || znak == 'Q' || znak == 'V')
return znak;
else
return 0;
}
//easier: zahodi vstup
void zahod_vstup() {
int c;
while((c = getchar()) != '\n');
}
//telo programu
int main() {
int c, x, stav = 0;
while(stav != 1) {
printf("Zadaj znak\n");
c = getchar();
if((x = isKQV(c)) == 0)
zahod_vstup();
else
stav = 1; //dostali sme potrebny
//znak => konci cyklus
//spracujeme nacitany znak v premennej x
printf("%c\n", x);
return 0;
}
je to len tak narychlo ale zakladny princip tam je...dalo by sa to este skratit ale takto to bude asi pochopitelnejsie...
a uz ozaj by som navrhoval uzavriet to tu, je tu uz dost rieseni...
"getline je v tomto pekny ze ti ulozi do dynamicky vytvoreneho pola cely vstup az do vyskytu konca riadku"
v tomto je getline praveze skaredy, nie pekny...potrebujes spracovat jeden znak a kvoli tomu nacitavas cely riadok? to vobec nie je pekne...ano je to jednoduche...pokial chces urobit program "len aby fungoval", tak v pohode...ale podla mna by malo byt cielom vytvarat efektivne programy...
podla mna to nie je dobry napad...kvoli jednemu znaku citas cely riadok a este aj zistujes dlzku toho retazca...trosku neefektivne...tato tema je podla mna vyriesena, je tu uz dost rieseni podla mna...
goto je skaredost...
urob to cez getchar ako tu uz niekto pisal...skratka vezmes len prve pismeno a ak to nie je K, V ani Q, tak prejdes retazec zo vstupu az do konca a vypises nejake upozornenie...a toto budes cyklit pokial nezada potrebne pismeno...
ak s tym budes mat problem, tak mi pisni na mail: strbak.t@gmail.com
-bude ti to hadzat segfault(v tom lepsom pripade) po spusteni ;)
"int cisla[1]" uprav na "int cisla[2]"
-cyklus ti prebehne 3x pricom chces len 2 cisla...
-nechapem tomu getcharu na konci...
samozrejme vsetky pripady sa nemusia riesit...ale treba si stanovit ktore su korektne a ktore nie...
ked si poviem, ze jediny spravny prijatelny vstup bude "K", tak nemam co riesit, jeden getchar a hotovo...ale ked chceme aby boli spravne aj vstupy ako "K ", " K" alebo "\nK", tak potom to uz musime osetrovat...
preto vravim, ze si treba najskor stanovit jasne vstupne podmienky
ale zase je rozdiel ci tie ostatne znaky tvoria medzery alebo nejake "viditelne znaky"
priklad:
"K "
"Kaaaaaa"
oba vstupy su neprijatelne?
asi si ma zle pochopil...myslim rozdelit vstupy na vstupy dobre a zle...
napr.:
"K" = dobry vstup
"Ahoj" = zly vstup
ale co napriklad "Kq"? alebo " K"?
najskor si ujasni taketo veci...ake vstupy su pre teba prijatelne a ktore nie...
#17 Venombrain
viem preco je to v cykle :)
btw. mne sa osvedcilo pri citani zo stdin urcit si najskor vstupne podmienky...aky vstup je korektny a aky vstup uz korektny nie je...potom vies osetrit vsetko tak ako potrebujes a nestane sa ti, ze uzivatel to nejako pokasle :D
neviem ako je to windowse, ja programujem v linuxe, ale tam ked v terminaly stlacim ENTER('\n'), tak sa mi ukonci vstup, takze ak ma toto byt len nejake osetrenie, ze co ak sa nahodou uzivatelovi najskor podari odriadkovat a az potom napise pismeno, tak mi v tvojom programe chybaju aj osetrenia pre vstup "floating pointov" pri zadavani rozmerov telies...
ale ak sa mam vyjadrit k teme, tak ked testujes len prvy znak, tak by som to riesil cez getchar();
a neviem ci to tu bolo uz povedane, ale to upozornenie sa ti vypisalo 2x pretoze getchar() precita jeden znak, porovna ho, prevedie sa prislusny prikaz a ked to cyklis, tak getchar() zoberie dalsi znak, cize '\n' pokial ukoncujes vstup stalecim klavesy enter, ten sa znovu porovna a prevedie sa prislusni prikaz...mozes sa pohrat aj s funkciou isspace a pod.