Szukam w forum pomocy bo głupieje do reszty. kolega Mariuis boryka się chyba z tym samym problemem ale mimo odpowiedzi pana Piotra nic z tego nie wynika.
Trochę sobie poimprowizowałem w ćwiczeniu dodając do niego własnych "pomysłów". Starałem się przy okazji wykorzystać to co opisano do lekcji XII. Ale problemy mam dwa. durne na maksa. Może ktoś będzie szukał rozwiązań poszczególnych etapów programu z ćwiczenia XII. Ja osobiście nie mogłem przejść przez etap budowania tablicy trójwymiarowej typu char i tymi klamerkami :) jakoś sobie to inaczej wyobrażałem. To moja wizja:
-------
#include <iostream>
#include <conio.h>
#include "ddtconsole.h"
#include <ctime>
#include <cctype>
int main()
{
using namespace ddt::console;
using namespace std;
char tablica_3D[ 6 ][ 10 ][ 100 ] =
{
{
"1. Czytaj logi",
"2. Usun temat",
"3. Lista oczekujacych prac",
"4. Pauza",
"5. Koniec",
"Administrowanie forum DDT"
},
{
"log log log log log log log log log log log log w ktorym nie ma nic ciekawego",
"log log log log log log log log log log log log w ktorym nie ma nic ciekawego",
"1blablablablabla blabl abl ba lb labl bal bla lb labl blabl bla ",
"koniec glupot"
},
{
"Tematy Przeznaczone do usuniecia:",
"1. GroupID = 191",
"2. GroupID = 163",
"3. GroupID = 671",
},
{
"1. Dokumentacja",
"2. Artykuly",
"3. Dzial Pliki",
"4. Sygnatury zamkniecia by Dante"
},
{
"Nie podano cyfry, sprobuj ponownie!",
"Aplikacja zakonczy dzialanie za <sek.> ",
"Co wybierasz szefie? ",
"Szefie zrob sobie przerwe. Ile minut potrzebujesz? ",
"Niestety przerwa minela czas wracac do pracy! ",
"Twoja przerwa wyniesie <w sekundach> ",
"Koniec na dzisiaj? No to do jutra!",
"No chwileczke... moze lepiej pojdziesz odrazu do domu?"
},
{
"Wcisnij cokolwiek - powrot do menu glownego."
}
};
int wybor;
enum { czytaj_logi = 1, tematy = 2, prace = 3, pauza = 4, end = 5 };
float minuty;
int x = 1;
int y = 8;
int kolory[ 5 ] = { 15, 15, 7, 8, 1 };
title( "Administrowanie forum DDT" );
textcolor( 7 );
gotoxy( 26, 2 );
cout << tablica_3D[ 0 ][ 5 ];
textcolor( 11 );
gotoxy( 21, 4 );
cout << tablica_3D[ 0 ][ 0 ] << "\t" << tablica_3D[ 0 ][ 2 ];
gotoxy( 21, 5 );
cout << tablica_3D[ 0 ][ 1 ] << "\t" << tablica_3D[ 0 ][ 3 ];
gotoxy( 34, 6 );
cout << tablica_3D[ 0 ][ 4 ];
cout << "\n" << "\n";
for(;; )
{
gotoxy( 1, 8 );
for( int iy = 0; iy < 17; iy++ )
{
for( int ix = 0; ix < 80; ix++ )
{
gotoxy( x, y );
cout << " ";
x++;
}
y++;
}
gotoxy( 1, 8 );
cout << tablica_3D[ 4 ][ 2 ];
( cin >> wybor ).get();
if( !isalpha( wybor ) &&( wybor == 1 || wybor == 2 || wybor == 3 || wybor == 4 || wybor == 5 ) )
{
switch( wybor )
{
case czytaj_logi:
gotoxy( 1, 9 );
cout << tablica_3D[ 1 ][ 0 ] << "\n"
<< tablica_3D[ 1 ][ 1 ] << "\n"
<< tablica_3D[ 1 ][ 2 ] << "\n";
break;
case tematy:
gotoxy( 26, 9 );
cout << tablica_3D[ 2 ][ 0 ];
gotoxy( 1, 10 );
cout << tablica_3D[ 2 ][ 1 ] << "\t"
<< tablica_3D[ 2 ][ 2 ] << "\t"
<< tablica_3D[ 2 ][ 3 ] << "\n";
break;
case prace:
gotoxy( 1, 9 );
cout << tablica_3D[ 3 ][ 0 ] << "\t"
<< tablica_3D[ 3 ][ 1 ] << "\n"
<< tablica_3D[ 3 ][ 2 ] << "\t"
<< tablica_3D[ 3 ][ 3 ] << "\n";
break;
case pauza:
cout << tablica_3D[ 4 ][ 3 ];
cin >> minuty;
cout << "\n";
if( minuty > 10 )
{
cout << tablica_3D[ 4 ][ 7 ];
break;
}
cout << tablica_3D[ 4 ][ 5 ] << minuty * 60 << "\n";
clock_t koniecpauzy;
koniecpauzy = clock() + minuty * 60 * CLOCKS_PER_SEC;
while( clock() < koniecpauzy ) { }
cout << "Koniec Pauzy";
break;
case end:
cout << tablica_3D[ 4 ][ 6 ] << "\n";
cout << tablica_3D[ 4 ][ 1 ];
for( int s = 5; s > 0; s-- )
{
for( int nx = 0; nx <= 5; nx++ )
{
textcolor( kolory[ nx ] );
gotoxy( 40, wherey() );
cout << s;
clock_t ktnx;
ktnx = clock() + 0.1 * CLOCKS_PER_SEC;
while( clock() < ktnx );
}
clock_t koniecend;
koniecend = clock() + 0.5 * CLOCKS_PER_SEC;
while( clock() < koniecend ) { }
}
return( 0 );
break;
default:
gotoxy( 1, 8 );
for( int iy = 0; iy < 17; iy++ )
{
for( int ix = 0; ix < 80; ix++ )
{
gotoxy( x, y );
cout << " ";
x++;
}
y++;
}
gotoxy( 1, 8 );
cout << tablica_3D[ 4 ][ 0 ];
getch();
break;
}
} else
cout << "Nic z menu";
if( isalpha( wybor ) )
{
cout << ", na dodatek to nie cyfry";
getch();
}
cout << "\n";
cout << tablica_3D[ 5 ][ 0 ];
getch();
}
}
-----
Cały program to pętla for( ; ; ){..}.
#1. używam przepisu na pauzę z cpluplus.com tyle co zakumałem.
problem jest taki że w case pauza działa jeśli wykomentuję /*case end */.
jak dziala jedno to drugie nie i odwrotnie. w sumie to raz działa raz nie :] ale to mały problem raczej grymas kompilatora, ustawień DevCplusa tylko czemu ? :)
#2 tu mnie pewnie trochę wyobraźnia poniosła ale
if( !isalpha( wybor ) &&( wybor == 1 || wybor == 2 || wybor == 3 || wybor == 4 || wybor == 5 ) )
mo ż e to zbyt wybuja ł e ale chcia ł em sprawdzi ć czy podzia ł a w ten spos ó b
if( cctype &&( b ó l || b ó l ) ).nie za bardzo wiem jak to okre ś li ć fachowo
{
switch...sie tu zaczyna
{...}
else
cout << "Nic z menu";
if( isalpha( wybor ) )
{
cout << ", na dodatek to nie cyfry";
getch();
problem mam taki... że program po ominięciu if(!isalpha....){switch}} wykonuje else. w else ma sprawdzić czy to czasem nie jest literka...ma dodać do zdania "..., na dodatek to nie cyfry".
potem wykonuje ostatni rozkazy petli for( ; ; ) czeka na getch().
Ale. Zdaje się, że program pamięta ostatnią wartość 'wybor' wprowadzaną przez cin >> wybor.
Jeśli przetestuję program wybierając poprawnie z menu 1,2,3,4(bez 5- w case end kończy się return(0) i się program ma mi skończyć). Wszystko cacy. Mam nadzieję, że zgodnie z założeniami ćwiczenia. Ale jeśli po wciśnięciu klawisza (getch()); pyta mnie ponownie o co chce szef i wprowadzę głupoty, program wykonuje ostatni case i się "psuje".
Jeśli przetestuję program wybierając cokolwiek innego np wprowadzając "1234"
pokazuje mi że to "Nic z menu, "(i o dziwo?) " na dodatek to nie cyfry";
Jeśli wpiszę "123" pokazuje mi "Nic z menu".... i BEZ "dodatku".
Durne poprostu.
Jeśli wpiszę litery... niestety program w miejscu wherex,wherey wypisze końcowe frazesy i sie buntuje.
Wiem, że w kodzie sobie trochę "poszalałem" po amatorsku ale miałem sporo frajdy wymyślając coś swojego. Nie do końca łapię czemu ten if(isdigit(wybor)){..} wykonuje takie głupoty. Na koniec mam wrażenie, że po pierwszym wykonaniu pętli, wyczyszczeniu przedpola, zadaniu ponownie pytania co wybierasz szefie.... program już wie(raczej pamięta na jakimś stosie czy coś ostatnią wartość) i się buntuje bo szef głupek.
Proszę o pomoc.
##Pixelmaster: zapoznaj się z
http://forum.ddt.pl/?Tid=622 (Pkt. 2 i 3)