Pour commencer:
SCANF
n'est pas défini par la langue.
CHAR
n'est pas défini par le langage.
Ok, avec celle de la route ...
La fonction scanf()
renvoie un entier. Cet entier est le nombre d'éléments d'entrée affectés ou la valeur de la macro EOF
si une défaillance d'entrée se produit avant la première conversion.
Vous n'avez pas vérifié la valeur de retour de l'appel scanf()
, vous n'avez donc aucune idée de ce qui s'est passé. Tout a peut-être bien fonctionné, ou le flux d'entrée peut s'être arrêté avant la première conversion, ou (pas pour% c) il peut y avoir eu un échec de conversion.
Tester la valeur de retour de scanf()
. En effet, teste toujours la valeur de retour de toutes les fonctions <stdio.h>.
char ch;
int result = scanf("%c", &ch);
if (result == 1) /* all ok */;
else if (result == 0) /* conversion failure: value of `ch` is indeterminate */;
else if (result == EOF) /* input failure; value of `ch` is indeterminate */;
Lorsque le résultat de l'appel scanf()
est EOF
, si vous voulez plus d'informations sur la raison de l'échec d'entrée, vous pouvez utiliser feof()
et/ou ferror()
.
else if (result == EOF) {
if (feof(stdin)) {
/* no data in input stream */
}
if (ferror(stdin)) {
/* error if input stream (media ejected? bad sector? ...?)
}
}
Pour répondre à votre question: what will promptChar() return?
Il retournera une valeur indéterminée de type char.
Vous pouvez suivre l'exemple de la fonction de bibliothèque qui gère les caractères et renvoie un int de promptChar()
. Ce serait la valeur du caractère lu à unsigned char
ou un int négatif (EOF
) en cas d'erreur. Lire la description pour fgetc()
, par exemple.
En outre, dans l'exemple, la valeur de retour sera indéterminée car il renvoie une variable locale. –
@Patrice: pas vraiment, la valeur de 'c' est renvoyée pas' c' elle-même ou son adresse. Des problèmes de retour des variables locales se produisent lorsque vous leur renvoyez des pointeurs. – pmg
"Toujours tester la valeur de retour de toutes les fonctions" -Je ne suis pas d'accord. Allez-vous vérifier la valeur de retour et 'errno' chaque fois que vous appelez' printf'? C'est trop pour moi. Vous ne serez pas capable de faire beaucoup de choses utiles si de simples sorties comme ça échouent. –
mk12