Program rozwala ci fun.getch() ,jeśli używasz strzałek to funkcja powinna w przypadku strzałki zostać wywołana 2x :
key = getch() ;
// kod strzałek wymaga wczytania 2 znaków
if(key== 0 || key == 244)
{
key = getch(); // wczyta sama
}
W Borlandzie w tym przypadku jako pierwszy kod zwracane było 0 .
#include <conio.h>
#include <iostream>
using namespace std ;
//---------------------------------------
const int UP = 0x48 ;
const int DOWN = 0x50 ;
const int ENTER= 0x0d ;
const int ESC = 0x1b ;
//---------------------------------------
typedef void(*fun)(void);
void Dodaj(void);
void Odejmi(void);
void Monozenie(void);
void Dziel(void);
void Pierwiastek(void);
void Kwadrat(void);
void Koniec(void);
struct pozycja_menu{
char* nazwa ;
fun obsluga_poz ;
};
//----------------------------------------------------------
pozycja_menu menu[]={
{"1 - Dodaj ", Dodaj },
{"2 - Odejmi ", Odejmi },
{"3 - Monozenie ", Monozenie},
{"4 - Dziel ", Dziel },
{"5 - Pierwiastek",Pierwiastek},
{"6 - Kwadrat ", Kwadrat },
};
//----------------------------------------------------------
int ile_pozycji ;
//---------------------------------------
int wybierz(pozycja_menu*menu)
{
int numer_pozycji = 0 ;
int kod ;
while(1){
system("cls");
cout << endl << endl ;
//---------------------------
for (int i = 0 ;i< ile_pozycji ;i++)
{
if(i == numer_pozycji)
{
cout << " > " ;
cout << menu[i].nazwa << " < " << endl ;
}else{
cout << " " ;
cout << menu[i].nazwa << " " << endl ;
}
}
//---------------------------
cout << endl << " [Enter] - Wybierz" << endl ;
cout<< " [Esc ] - Koniec" << endl ;
//---------------------------
kod = getch() ; //<- obsluga klawiatury przez menu
if(kod == 0 || kod == 244){ kod = getch(); }
switch (kod)
{
case ENTER:
return numer_pozycji ;
case UP :
numer_pozycji-- ;
if(numer_pozycji < 0){ numer_pozycji = 0 ; }
break;
case DOWN :
numer_pozycji++;
if(numer_pozycji > ile_pozycji-1){ numer_pozycji = ile_pozycji -1; }
break;
case ESC :
return ile_pozycji;
default: ;
}
}// while
}
//---------------------------------------------------------------------
void Dodaj(void)
{
float x,y ;
cout<<"Podaj pierwsza liczbe"<<endl;
cin>> x;
cout<<"podaj druga liczbe"<<endl;
cin>> y;
cout << x << " + " << y << " = " << x+y << endl ;
}
//---------------------------------------------------------------------
void Odejmi(void)
{
float x,y ;
cout<<"Podaj pierwsza liczbe"<<endl;
cin>> x;
cout<<"podaj druga liczbe"<<endl;
cin>> y;
cout << x << " - " << y << " = " << x-y << endl ;
}
//---------------------------------------------------------------------
void Monozenie(void)
{
cout << "Uzupelnij kod funkcji :-)" << endl ;
}
//---------------------------------------------------------------------
void Dziel(void)
{
cout << "Uzupelnij kod funkcji :-)" << endl ;
}
//---------------------------------------------------------------------
void Pierwiastek(void)
{
cout << "Uzupelnij kod funkcji :-)" << endl ;
}
//---------------------------------------------------------------------
void Kwadrat(void)
{
cout << "Uzupelnij kod funkcji :-)" << endl ;
}
//---------------------------------------------------------------------
int main(int argc, char **argv)
{
int poz ;
ile_pozycji = sizeof(menu)/sizeof(pozycja_menu);
while((ile_pozycji) != (poz=wybierz(menu)))
{
system("cls");
menu[poz].obsluga_poz();
getch();
}
return 0;
}
AmBeam napisał(a)
//EDIT - ucialem czesc kodu, jest tylko to co wydaje mi sie za niezbedne
Optymista ... masz totalny b.rdel w tym kodzie .