Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Kurs XII - ćw] Problem z zawieszaniem programu

Ostatnio zmodyfikowano 2009-08-16 19:52
Autor Wiadomość
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ę.
C/C++
//===>Kod programu<===
#include <iostream>
#include <conio.h>
#include <ctime>
#include "console.ddt"


int main()
{
    using namespace std;
   
    //deklaracja tablicy
    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." }
    };
   
    //główny człon programu
    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();
   
    //pętla
    do
    {
       
        cout << szef;
        ( cin >> znak ).get();
       
       
       
        //warunki
       
        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 );
   
    //zakończenie programu
    for( short i = 6; i <= 0; --i )
    {
        cout << "Program zakonczy sie za " << i << " sek." << endl;
        sekundy = 1;
        while( clock() - timom < czas )
            ;
       
    }
   
   
    return( 0 );
}
//===> koniec kodu<===
Skompilowany program (Projekt2.exe).
P.S.: Jeśli znaleźliście jeszcze jakieś błędy, prosiłbym o wskazanie ich.
P-9484
DejaVu
» 2009-08-15 13:33:04
C/C++
timom = clock();
czas = minuty * 60 * CLOCKS_PER_SEC;

while( clock() - timom < czas )
    ;

P-9486
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.
P-9496
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ęć.
P-9497
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.
P-9507
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.
P-9544
« 1 »
  Strona 1 z 1