I don't use C++ and instead C#, but it's basic logic here if you can only get one key down and key up.
First, you check for one key down. It should fire only once, right? Good. Make a boolean like isDown=true. Now check for a key up. When the key is up, then isDown=false.
So basically, here's some psuedo-code:
bool isDown=false;
if (key is down) {
isDown=true;
}
if (key is up) {
isDown=false;
}
It makes sense, that if you never release the key, then isDown will always be true, thus creating a sense that it will fire more than once. Just create an if statement like if(isDown==true) and put the event like firing missiles in there.