Hola
aqui te mando un ejemplo de un menu manejado con las flechas arriba y abajo
#include <stdio.h>
#include <conio.h>
void menu(void)
{
textbackground(BLUE);
textcolor(WHITE);
clrscr();
gotoxy(20,10);printf("ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»\n");
gotoxy(20,11);printf("º º\n");
gotoxy(20,12);printf("º opcion 1 º\n");
gotoxy(20,13);printf("º opcion 2 º\n");
gotoxy(20,14);printf("º opcion 3 º\n");
gotoxy(20,15);printf("º opcion 4 º\n");
gotoxy(20,16);printf("º opcion 5 º\n");
gotoxy(20,17);printf("º opcion 6 º\n");
gotoxy(20,18);printf("º opcion 7 º\n");
gotoxy(20,19);printf("º opcion 8 º\n");
gotoxy(20,20);printf("º º\n");
gotoxy(20,21);printf("ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\n");
}
void main(void)
{
int pos=0;
char t;
_setcursortype(_NOCURSOR);
while(1)
{
menu();
textcolor(RED);
gotoxy(23,12+pos);
switch(pos)
{
case 0 : cprintf("opcion 1");
break;
case 1 : cprintf("opcion 2");
break;
case 2 : cprintf("opcion 3");
break;
case 3 : cprintf("opcion 4");
break;
case 4 : cprintf("opcion 5");
break;
case 5 : cprintf("opcion 6");
break;
case 6 : cprintf("opcion 7");
break;
case 7 : cprintf("opcion 8");
break;
}//switch()
t=getch();
if(t==0)
{
t=getch();
switch(t)
{
case 80 : pos++;
if(pos==8)
pos=0;
break;
case 72 : pos--;
if(pos==-1)
pos=7;
break;
}//break
}//if
else if(t==27)
break;
}//while
_setcursortype(_NORMALCURSOR);
}
ten en cuenta que las flechas tienen dos codigos ascii, por asi decirlo en cero (0) y otro codigo por eso hay un if y un switch en el ejemplo
espero que te sirva....