16.07.2014 Views

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6.7. WYPRÓBOWYWANIE DRUGIEJ WERSJI 205<br />

6.7. Wypróbowywanie drugiej wersji<br />

Moemy przetestowa nasz drug wersj programu. Wpisz 2 i znak nowego wiersza. Brak reakcji.<br />

Wpisz jeszcze jeden znak nowego wiersza, aby sprawdzi, czy program nie zasn. Nadal<br />

nic. Wpisz 3 i znak nowego wiersza. Jest odpowied — 2. Spróbuj wyraenia 2+2 ze znakiem<br />

nowego wiersza. Odpowied brzmi 3. Teraz na ekranie znajduj si nastpujce dane:<br />

2<br />

3<br />

=2<br />

2+2<br />

=3<br />

Hmm. Moe wprowadzenie funkcji putback() i uycie jej w funkcjach expression() i term()<br />

nie pomogo w rozwizaniu problemu? Spróbujmy czego innego:<br />

2 3 4 2+3 2*3<br />

=2<br />

=3<br />

=4<br />

=5<br />

Tak, to s poprawne odpowiedzi! Ale brakuje ostatniej (6). Wci mamy problem z tokenami,<br />

ale tym razem nie chodzi o ich zjadanie, lecz o to, e wynik jest zwracany dopiero po wpisaniu<br />

kolejnego wyraenia. Program nie drukuje od razu wyniku. Opónia to do momentu wczytania<br />

pierwszego tokenu nastpnego wyraenia. Niestety nie widzi go, dopóki nie naciniemy klawisza<br />

Enter po wpisaniu nastpnego wyraenia. Wniosek taki, e program nie dziaa le, tylko<br />

odpowiada z opónieniem.<br />

Jak to poprawi? Jednym z oczywistych rozwiza jest wprowadzenie „polecenia drukowania”.<br />

Rol t niech peni rednik, którego pojawienie si bdzie oznaczao koniec wyraenia<br />

i wymuszao wydruk wyniku. Przy okazji dodamy polecenie zamknicia programu. Do tego<br />

celu doskonale nada si znak k (od sowa koniec). Obecnie w funkcji main() mamy taki kod:<br />

while (cin) cout

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!