To dlatego, że strzałki to jakby "specjalne" klawisze - trzeba je inaczej obsługiwać. Rzuć okiem na takie demo, powinno Ci to wyjaśnić więcej niż 1000 słów:
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
short key1,key2;
do {
key1 = GetAsyncKeyState(VK_LEFT);
key2 = GetAsyncKeyState(VK_RIGHT);
if (key1< 0)
cout << "W lewo" << endl;
if (key2< 0)
cout << "W prawo" << endl;
} while (1);
return 0;
}