Почетак › Форуми › Линукс › Програмирање › Konverzija karaktera – %c
- This topic has 15 одговора, 8 гласова, and was last updated 19 years, 7 months раније by
burga.
-
АуторЧланци
-
28. јануар 2007. у 8:25 pm #8306
BrokeBody
УчесникVežbam malo C pred ispit i naiđem na jedan glup problem. ??? Uradio sam jedno malo programče za forum, primera radi. (da ne pomisli neko da nam ovakve stvari daju na ispitima 😛 )
Program štampa celobrojne vrednosti za promenljive x, y i z koje se unose preko tastature. ::) Posle štampanja, program treba da pita korisnika da li želi novo unošenje vrednosti (D/N).
Uradio ja sve, i po mojoj zdravoj logici, program bi trebalo sve da radi kako sam i hteo, ali posle štampanja vrednosti, umesto da me pita da li noću novo unošenje, samo odštampa “Press any key to continue” i onaj poslednji korak mi preskoči. :-\
Evo prve verzije, koja nije radila
—————————————#include
void main()
{
int x, y, z;
char ch;pocetak:
printf (“Unesite vrednosti promenljivih x, y i z:\n\n”);
scanf (“%d %d %d”, &x, &y, &z);
printf (“\nx=%d | y=%d | z=%d\n\n”, x, y, z);printf (“Da li zelite novo unosenje? (D/N)\n\n”);
scanf (“%c”, &ch);
if (ch == ‘d’ || ch == ‘D’)
goto pocetak;
}
———————————————————————Evo druge verzije, koja radi
———————————#include
void main()
{
int x, y, z;
char ch;pocetak:
printf (“Unesite vrednosti promenljivih x, y i z:\n\n”);
scanf (“%d %d %d”, &x, &y, &z);
printf (“\nx=%d | y=%d | z=%d\n\n”, x, y, z);printf (“Da li zelite novo unosenje? (D/N)\n\n”);
scanf (“%c%c“, &ch, &ch);
if (ch == ‘d’ || ch == ‘D’)
goto pocetak;
}
———————————————————————-Samo sam dodao još jednom %c i &ch, i od tada sve radi kako treba.
Što ovo ovako retardirano radi? Jel’ ću ja da nailazim na još ovako zatupele slučajeve? 😮 ???
28. јануар 2007. у 11:12 pm #52122zchira
Учесникverovatno znas ali za svaki slucaj da te podsetim:
U danasnjem programiranju se izbegava koriscenje komande bezuslovnog grananja (tj. goto).
Postoje citave tehnike koje se bave problemom prevodjenja nestrugkturnih algoritama u strukturne.
Kod strukturnih algoritama postoje samo grananja tipa if-then-else i petlje tipa for-next i do-while i svaki algoritam je moguce konvertovati u strukturni oblik.
Tako da bi u ovom slucaju program izgledao otprilike ovako:#include
void main()
{
int x, y, z;
char ch;ch=’d’;
while (ch==’d’ || ch==’D’){
printf (“Unesite vrednosti promenljivih x, y i z:nn”);
scanf (“%d %d %d”, &x, &y, &z);
printf (“nx=%d | y=%d | z=%dnn”, x, y, z);printf (“Da li zelite novo unosenje? (D/N)nn”);
scanf (“%c%c”, &ch, &ch);
}
}Što ovo ovako retardirano radi? Jel’ ću ja da nailazim na još ovako zatupele slučajeve?
Verovatno ces da nailazis na nesto slicno sto ce u pocetku da deluje retardirano, ali za sve verovatno postoji logicno objasnjenje (mada za ovaj primer ne mogu da ti ponudim objasnjenje…morao bi da probam licno pa da vidim….)
28. јануар 2007. у 11:33 pm #52123BrokeBody
Учесникverovatno znas ali za svaki slucaj da te podsetim:
U danasnjem programiranju se izbegava koriscenje komande bezuslovnog grananja (tj. goto).
Postoje citave tehnike koje se bave problemom prevodjenja nestrugkturnih algoritama u strukturne.
Kod strukturnih algoritama postoje samo grananja tipa if-then-else i petlje tipa for-next i do-while i svaki algoritam je moguce konvertovati u strukturni oblik.
Tako da bi u ovom slucaju program izgledao otprilike ovako:#include
void main(){
int x, y, z;
char ch;[b]ch=’d’;
while (ch==’d’ || ch==’D’){[/b]
printf (“Unesite vrednosti promenljivih x, y i z:nn”);
scanf (“%d %d %d”, &x, &y, &z);
printf (“nx=%d | y=%d | z=%dnn”, x, y, z);printf (“Da li zelite novo unosenje? (D/N)nn”);
scanf (“%c%c”, &ch, &ch);
[b] }[/b]
}Znam 😉 , nego mi ne rešismo problem sa ovom konverzijom. :- Što mora duplo u ovom slučaju? ???
29. јануар 2007. у 12:05 am #52124zchira
Учесникajde, probacu sutra kod mene pa cu da javim ako uspem da razjasnim ‘misteriju’ 😀 O0
29. јануар 2007. у 8:13 am #52125maddox
Учесник[code]#include
void main ()
{
int x, y, z;
char ch;
ch = ‘d’;
while (ch == ‘d’ || ch == ‘D’)
{
printf (“Unesite vrednosti promenljivih x, y i z:nn”);
scanf (“%d %d %d”, &x, &y, &z);
printf (“nx=%d | y=%d | z=%dnn”, x, y, z);
printf (“Da li zelite novo unosenje? (D/N)nn”);
scanf (” %c”, &ch);
}
}
[/code]Problem je u tome sto ti scanf kada nema ove praznine u ch stavlja vrednost int vrednost 10, ako pogledas ASCII tabelu, to ti je LF ili ti u C-eovskom jeziku n. Kada koristis tvoj primer sa dve konverzije, prvi put ti se u ch upise novi red, a zatim se upise vrednost koju unosi korisnik pa zato prolazi.
Poz.
29. јануар 2007. у 3:46 pm #52126BrokeBody
УчесникHvala.
31. јануар 2007. у 10:51 am #52127jboban
УчесникProblem je u tome sto ti scanf kada nema ove praznine u ch stavlja vrednost int vrednost 10
Pre konačnog rešenja, znaš li zašto? ::)
P.S. Ovako si mu dao ribu, umesto da ga naučiš da peca :p31. јануар 2007. у 12:30 pm #52128BrokeBody
УчесникProblem je u tome sto ti scanf kada nema ove praznine u ch stavlja vrednost int vrednost 10
Pre konačnog rešenja, znaš li zašto? ::)
Zašto? 🙂
31. јануар 2007. у 7:33 pm #52129jboban
УчесникZašto? 🙂
Pitanje je za maddox-a. Ti si dobio ribu i sad čekaj 😎
31. јануар 2007. у 10:17 pm #52130Владимир
УчесникBogami, i mene baš zanima zašto. Nikako mi nije jasno.
😮 -
АуторЧланци
Мораш бити пријављен да би поставио коментар у овој теми.