[lekcja 15] Długo włączajacy się program - nie znajduję przyczyny
Ostatnio zmodyfikowano 2013-03-16 19:59
renegat2x Temat założony przez niniejszego użytkownika |
[lekcja 15] Długo włączajacy się program - nie znajduję przyczyny » 2013-03-16 14:08:53 Witam to mój pierwszy post więc proszę o wyrozumiałość. Tak jak w temacie mam program (zadanie domowe do lekcji 15), który właściwie wczytuje dane sprawdza ich poprawność i wyświetla wynik. Tylko jego uruchomienie trwa dłuższą chwilkę tzn wyświetla się okienko, kursor miga i brak komunikatu. Sądziłem że źle wykonany program ale za chwilkę się wyświetlił komunikat i poprawnie wszystko zadziałało. Poniżej podaje kod programu: #include <iostream> int main() { int liczba; bool a1; do { std::cout << "Podaj liczbe: "; std::cin >> liczba; a1 = std::cin.good(); std::cout << "Warunek " << a1 << std::endl; std::cin.clear(); std::cin.sync(); } while( a1 == false ); std::cout << "Wpisales poprawne dane, liczba: " << liczba << " Program zakonczy sie po wcisnieciu dowolnego klawisza" << std::endl; return 0; }
Z obserwacji zauważyłem że czas się wydłużył gdy dodałem warunek while (a1 == false) oraz sprawdzenie poprawności danych i czyszczenie strumienia i flagi błędu. Próbowałem na różne sposoby niestety albo program działa dobrze tylko długo się włącza albo działa źle i nie ma opóźnień. Znalazłem też takie rozwiązania zadania: #include <iostream> using namespace std;
int main() { int liczba; bool a1, b1; do { cout << "Podaj liczbe" << endl; cin >> liczba; a1 = std::cin.good(); b1 = std::cin.fail(); std::cin.clear(); std::cin.sync(); if( a1 ) cout << "Gratulacje, podales liczbe" << endl; } while( b1 ); return 0; }
I tu kolejne: #include <iostream> #include <conio.h> #include <cstdio> using namespace std;
int main()
{ double liczba; cout << "Podaj jakas liczbe, aby zakonczyc program:"; cin >> liczba; bool spr = cin.good(); cin.clear(); cin.sync(); if( spr == false ) do { cout << "Prosilem o podanie liczby : "; cin >> liczba; spr = cin.good(); cin.clear(); cin.sync(); } while( !spr ); if( spr == true ) cout << "\n Gratulacje udalo sie zakonczyc dzialanie programu" << endl; getch(); return 0; }
Oba wymagały drobnych przeróbek bo nie działały prawidłowo (zdefiniowanie zmiennej dla warunku logicznego poprawności wczytywanych danych oraz brak czyszczenia strumienia) Niestety te przykłady także włączają się dłużej coś jakby program przycinał lub zawieszał się na chwilę. Być może problem nie leży w kodzie programu (3 różne przypadki) a jedynie w błędnym działaniu mojego komputera. Proszę o wskazówki czy ewentualnie coś mogę poprawić. Czy mam jakiś wpływ na szybkość uruchamiania się programu? Z góry dziękuję za pomoc i rady :). |
|
xevuel |
» 2013-03-16 14:19:48 Wszystkie kody działają dobrze, tj. uruchamiają się od razu. Posiadasz antywirusa? Jest on włączony? Jeśli tak, wyłącz go, i spróbuj ponownie skompilować i uruchomić program.
Btw: Brawo, wreszcie jakiś temat w którym ktoś próbował samodzielnie zlokalizować problem :) |
|
renegat2x Temat założony przez niniejszego użytkownika |
» 2013-03-16 18:12:32 Wielkie dzięki za pomoc. Faktycznie to antywirus powodował opóźnienie :) A ja 2 dni straciłem szukając problemu :( Mam jeszcze pytanie, a zakładanie dla niego nowego tematu jest bezsensowne. Mianowicie chodzi mi o zapis while( a1 == false );
while( !a1 );
while( a1 == 0 );
while( std::cin.fail() );
while( !std::cin.good() );
Jeśli dobrze zrozumiałem zagadnienie i nic nie pomyliłem to są one równoznaczne, ale który z tych zapisów jest najbardziej optymalny? Czy to jest od czegoś zależne? Dziękuje za słowa pochwały w kwestii samodzielnego poszukiwania problemu. Mam podobno umysł analityczny i szukam wyjaśnienia problemu samodzielnie krok po kroku chyba że moje metody zawodzą i nie widzę sensownego wyjścia lub błędu w rozumowaniu. W taki sposób najprościej można się czegoś nauczyć choć wcale nie jest to taka łatwe droga jak pójście na gotowca :) Dlatego też podoba mi się to forum i oferowane kursy zmuszające do myślenia. Mam nadzieję że nauczę się c++ w wystarczającym stopniu do realizacji moich potrzeb i że nie będę musiał zbyt często zadręczać was swoimi zadaniami domowymi z kursu:). PS. Kiedyś liznąłem Pascala ale to było dawno temu i w bardzo skromnym zakresie. |
|
xevuel |
» 2013-03-16 18:26:21 Wszystkie są jednakowo optymalne. |
|
renegat2x Temat założony przez niniejszego użytkownika |
» 2013-03-16 19:59:16 Dziękuję za wyczerpującą odpowiedź:). Temat zamykam. |
|
« 1 » |