pascalfree utworzono 16 maja 2012 utworzono 16 maja 2012 Witam mam problem z free pascalem IDE jest to wersja 2.6.0 win32, problem się pojawia gdy zaczynam programowac jakiś program podam przykład wystepowania problemu: [codebox] VAR liczba1:longint; liczba2:longint; BEGIN writeln; writeln('Podaj pierwszą liczbę'); read(liczba1); writeln('Podaj drugą liczbę'); read(liczba2); write('Ich suma wynosi: ',liczba1+liczba2); readln; END. [/codebox] Wpisuje to wszystkmo gdy przechodze do testowania programu po podaniu drugiej liczby testowanie sie urywa i przechodze do edycji gdy znowu przetestuje dopiero wtedy program podaje mi wynik.Czy wie ktos może o co chodzi??co zrobić aby poprawnie działał??dodam że instalowałam już go powtórnie.Prosze o pomoc
leggo komentarz 16 maja 2012 komentarz 16 maja 2012 (edytowane) Program działa u Ciebie tak jak powinien. Jeśli odpalisz go bezpośrednio z konsoli będzie wyświetlał się poprawnie. Żeby wyświetlało się dobrze po odpaleniu przez kompilator zamień [b]read(...);[/b] na [b]readln(...);[/b]. [CODE] var liczba1 :longint; liczba2 :longint; begin writeln; writeln('Podaj pierwszą liczbę'); readln(liczba1); writeln('Podaj drugą liczbę'); readln(liczba2); write('Ich suma wynosi: ',liczba1+liczba2); readln; end. [/CODE]
Lechu1994 komentarz 17 maja 2012 komentarz 17 maja 2012 (edytowane) [CODE]uses crt; VAR liczba1:longint; liczba2:longint; BEGIN writeln; writeln('Podaj pierwszą liczbę'); read(liczba1); writeln('Podaj drugą liczbę'); read(liczba2); write('Ich suma wynosi: ',liczba1+liczba2); readln; delay(10000); END.[/CODE] Zastosowałem biblioteke crt aby moc uzyc funkcji delay ktora opoznia zamkniecie programu w tym przypadku o 10 sekund
leggo komentarz 17 maja 2012 komentarz 17 maja 2012 @up To zdecydowanie nie jest dobre rozwiązanie. Tak jak pisałem wyżej: problem nie występuje gdy uruchomisz program z konsoli. Przy uruchamianiu programu przez kompilator problem pojawia się ponieważ [b]read();[/b] nie czyści do końca bufora (pozostawia znak nowej linii). To co zostaje w buforze jest przekazywane bezpośrednio do przedostatniej linijki i dlatego program nie czeka już na wciśnięcie klawisza. Jeśli już koniecznie chcesz do pobierania liczb użyć [b]read[/b], a nie [b]readln[/b], to lepiej zrobić to tak: [CODE] var liczba1 :longint; liczba2 :longint; begin writeln; writeln('Podaj pierwszą liczbę'); read(liczba1); writeln('Podaj drugą liczbę'); read(liczba2); write('Ich suma wynosi: ',liczba1+liczba2); readln(); readln(); end. [/CODE] Teraz program, tak jak powinien, przed zakończeniem działania czeka na wciśnięcie klawisza.
Lechu1994 komentarz 17 maja 2012 komentarz 17 maja 2012 a dlaczego moj jest niedobry po 10 sekundach sie zamyka i co w tym zlego?
leggo komentarz 18 maja 2012 komentarz 18 maja 2012 Dlatego, że jest to rozwiązanie prowizoryczne, które daje w miarę pozytywny efekt tylko w tym konkretnym przypadku. Nie całkiem pozytywny, bo program zmusza użytkownika do odczekania zawsze dokładnie takiego samego czasu przed zakończeniem działania. Użytkownik może chcieć zakończyć program szybciej lub odczekać dłuższy czas przed przejściem do dalszej części. Ponadto takie rozwiązanie wymaga użycia dodatkowego modułu, bez którego jesteśmy w stanie się obyć. Gdy pojawia się jakiś problem w działaniu programu raczej powinniśmy szukać przyczyn błędu, a nie zadowalać się maskowaniem skutków. Szczególnie w tak podstawowych programach.
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.