Početak›Forumi›Linuks›Programiranje›Konverzija karaktera – %c
- This topic has 15 odgovora, 8 glasova, and was last updated 17 years, 2 months ranije by burga.
-
AutorČlanci
-
28. januar 2007. u 8:25 pm #8306BrokeBodyUčesnik
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. januar 2007. u 11:12 pm #52122zchiraUčesnikverovatno 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. januar 2007. u 11:33 pm #52123BrokeBodyUčesnikverovatno 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. januar 2007. u 12:05 am #52124zchiraUčesnikajde, probacu sutra kod mene pa cu da javim ako uspem da razjasnim ‘misteriju’ 😀 O0
29. januar 2007. u 8:13 am #52125maddoxUčesnik[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. januar 2007. u 3:46 pm #52126BrokeBodyUčesnikHvala.
31. januar 2007. u 10:51 am #52127jbobanUčesnikProblem 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. januar 2007. u 12:30 pm #52128BrokeBodyUčesnikProblem 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. januar 2007. u 7:33 pm #52129jbobanUčesnikZašto? 🙂
Pitanje je za maddox-a. Ti si dobio ribu i sad čekaj 😎
31. januar 2007. u 10:17 pm #52130ВладимирUčesnikBogami, i mene baš zanima zašto. Nikako mi nije jasno.
😮 -
AutorČlanci
Moraš biti prijavljen da bi postavio komentar u ovoj temi.