Riscrivo quello fatto dall'altra parte. Questa funzione IMPEDISCE all'utente di digitare cose che tu non vuoi.
codice:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

void GetString(int lenght, char *buffer, bool allowedchars[256])
{
    int i;
    for(i = 0; i < lenght;)
    {
        int a = getch();
        if (allowedchars[a]) 
        {
            buffer[i] = a;
            putch(a);
            i++;
        }  
    }
    buffer[i] = '\0';
}

int main()
{
    bool OkChars[256];
    for (int i = 0; i < 256; i++) OkChars[i] = false;
    for (int i = 65; i < 91; i++) OkChars[i] = OkChars[i+32] = true;
    char str[4];
    GetString(3, str, OkChars);
    printf("\n%s", str);
    getch();
}
Si possono aggiungere anche controlli di formato, volendo. Comunque quello che vuoi fare tu si può fare anche in un altro modo:
codice:
bool IsNumeric(char *string)
{
    for(int i = 0; string[i] != '\0'; i++)
    {
        if ((string[i] < '0' || string[i] > '9') && string[i] != '.') return false;
    }
    return true;
}