Hmm, je dirais plutôt que c'est la manière de rentrer ton caractère au clavier qui fait qu'il y a deux fois le message. La saisie doit être configuré en mode ligne, donc pour valider ton entrée, tu dois saisir un caratère, puis appuyer sur la touche "entrée". Bah voilà, pour getchar(), ça fait deux caractères.
Solution facile : tu filtres les '\r' ou '\n'
Solution plusse mieux : tu bascules la saisie en mode caractère (c'est faisable en quelques lignes de code, mais je n'ai plus ça sous la main, et flemme de faire la recherche. C'est lié à la gestion des terminaux posix, ce n'est pas dans la libc).