Bueno, espero que no te hayan respondido por otros medios, y espero llegar a tiempo. Tu problema, es que antes da hacer nada, tienes que verificar que el asterisco se puede mover, y en caso contrario, no hacer nada, o mostrar el mensaje. Te dejo un pequeño fragmento de código, lo he probado y funciona.
Código:
#include<windows.h>
#define limite printf("Se ha alcanzado el límite de la pantalla");
int cc=40,cf=12;
char tecla;
main()
{
while(tecla!='x')
{
clrscr();
gotoxy(cc,cf);printf("*") ;
tecla=getch();
switch (tecla)
{
case'f':
if(cc<79)cc++;else{ limite Sleep(200);}
break;
case's':
if(cc>2)cc--;else { limite Sleep(200);}
break;
El sleep es para que te de tiempo de ver el mensaje en pantalla, si no , se borra antes de que lo veas.
Espero haberte sido de ayuda.