Micah Temat założony przez niniejszego użytkownika |
[Kurs XII - ćw] Problem z zawieszaniem programu » 2009-08-15 13:07:34 Nie wychodzi mi poprawne wykonanie ćw. z lekcji XII, a dokładnie zdaje mi się, że program w ogóle nie korzysta z zadeklarowanych zmiennych dotyczących czasu (przemnożenie minut * 60, zawieszenie programu) i nie wykonuje związanych z nim procedur. Abyście lepiej zrozumieli problem, zamieszczam kod źródłowy i program skompilowany. Jeżeli chodzi o wyświetlanie tekstów, poprawię je później. I jeszcze jedno, czemu kiedy wejdę w zawieszanie programu, to po wykonaniu zadanych(przynajmniej niektórych) czynności program wyświetla dwa razy napis "Co wybierasz szefie? "? Nie proszę o zrobienie za mnie programu, ale wskazanie mi, gdzie tkwią błędy. Z góry dziękuję. #include <iostream> #include <conio.h> #include <ctime> #include "console.ddt"
int main() { using namespace std; const char szef[ 50 ] = { "Co wybierasz, szefie? " }; const char tab[ 5 ][ 5 ][ 500 ] = { { "1. Czytaj logi", "2. Usun temat", "3. Lista oczekujacych prac", "4. Pauza", "5. Koniec" }, { "16 Styczen 2008 00:01 - atak SYN flooding IP 99.99.99.1", "20 maj 2008 14:13 - uzytkownik Macius 700 blad logowania", "31 lipiec 2008 20:09 - aktualizacja Kursu Allegro", "5 sierpien 2008 17:29 - zarejestrowal sie uzytkownik Mapet" }, { "Tematy przeznaczone do usuniecia", "1. GroupID = 191", "2. GroupID = 163", "3. GroupID = 671" }, { "1. Dokumentacja.", "2. Dzial Pliki.", "3. Artykuly.", "Sygnatury zamkniecia by Dante." }, { "Szefie zrob sobie przerwe, ", "ile potrzebujesz minut?", "Twoja przerwa wyniesie(w sekundach): ", "Niestety przerwa juz minela czas do roboty." } }; cout << tab[ 0 ][ 0 ] << " " << tab[ 0 ][ 1 ]; cout << tab[ 0 ][ 2 ] << " " << tab[ 0 ][ 3 ]; cout << " " << tab[ 0 ][ 4 ] << endl << endl; short znak; float minuty; float sekundy = minuty * 60; float czas = sekundy * CLOCKS_PER_SEC; time_t timom = clock(); do { cout << szef; ( cin >> znak ).get(); switch( znak ) { case 1: { for( short i = 0; i <= 3; i++ ) cout << tab[ 1 ][ i ] << endl; }; break; case 2: { cout << tab[ 2 ][ 0 ] << endl << tab[ 2 ][ 1 ] << " " << tab[ 2 ][ 2 ] << " " << tab[ 2 ][ 3 ]; } break; case 3: { cout << tab[ 3 ][ 0 ] << " " << tab[ 3 ][ 1 ] << endl << tab[ 3 ][ 2 ] << " " << tab[ 3 ][ 3 ]; } break; case 4: { cout << tab[ 4 ][ 0 ] << tab[ 4 ][ 1 ] << endl; ( cin >> minuty ).get(); cout << tab[ 4 ][ 2 ] << sekundy << endl; while( clock() - timom < czas ) ; cout << "Niestety przerwa juz minela czas do roboty."; }; break; } cout << endl << endl; } while( znak != 5 ); for( short i = 6; i <= 0; --i ) { cout << "Program zakonczy sie za " << i << " sek." << endl; sekundy = 1; while( clock() - timom < czas ) ; } return( 0 ); }
Skompilowany program (Projekt2.exe).P.S.: Jeśli znaleźliście jeszcze jakieś błędy, prosiłbym o wskazanie ich. |
|
DejaVu |
» 2009-08-15 13:33:04 timom = clock(); czas = minuty * 60 * CLOCKS_PER_SEC;
while( clock() - timom < czas ) ;
|
|
Micah Temat założony przez niniejszego użytkownika |
» 2009-08-15 18:46:02 Zrobiłem, jak pokazałeś: w deklaracji zmiennych przed "switch'em" usunąłem przypisanie konkretnych danych zmiennym "timom" i "czas", a przypisałem im te wartości przed samą pętlą zawieszającą "while". Nic to nie zmieniło i cały czas program wypisuje takie coś : Screenshot. I jeszcze jedno: co zrobić, żeby po wpisaniu do ilości minut liczby 0,5 nie zamykał się program. Nie wiem, czemu się tak w ogóle dzieje. Przecież nie wczytuję wtedy zmiennej "znak", tylko "minuty", a przecież pętla kończy się po wprowadzeniu wartości "5" do zmiennej "znak". To są nawet odmienne typy zmiennych. To tak na marginesie. |
|
GoldWolf |
» 2009-08-15 22:15:17 Nie mam błędu, o którym piszesz nawet w pierwszej wersji kodu ?!? Obrazek - dodatkowo lepiej używać tego serwisu do wrzucania zdjęć. |
|
DejaVu |
» 2009-08-16 15:38:51 Wpisałeś wartość 0,6. Liczby zmienno przecinkowe podaje się z kropką, czyli 0.6. Strumień odczytał pierwszą liczbę, a druga pozostała w strumieniu. Gdy była odczytywana opcja stwierdził, że w strumieniu znajdują się dane i znalazł liczbę 6. Opcja nr. 6 nie istnieje, więc wydał z siebie komunikat dwa razy. |
|
Micah Temat założony przez niniejszego użytkownika |
» 2009-08-16 19:52:21 Żeby wiedzieć, co robi program, jeżeli nie ma tego zadeklarowanego, to trzeba mieć sporą wiedzę o C++. Problem rozwiązany. Cały czas tylko nie mogę tak ułożyć kodu, żeby program liczył czas do zamknięcia i jednocześnie nie wczytywał klawisza (nie mówiąc o tym, że w ogóle nie wyświetla mi komunikatów typu "Program zamknie się za 'i' sek".Ale to już chyba temat na kolejny topic.
Dziękuję wszystkim zainteresowanym za pomoc w rozwiązaniu problemu, szczególnie Piotrowi Szawdyńskiemu. |
|
« 1 » |