Question

Lors de la programmation C pour la console de commande, ce qui se passe lorsque vous avez une fonction qui tente d'utiliser Scanf pour demander l'entrée d'utilisateur pour une variable CHAR, et les types d'utilisateur CTRL + Z (EOF) et frappe entrer?

Par exemple:

char promptChar()
{
    char c;
    printf("Enter a character: ");
    scanf("%c", &c);
    return c;
}

Si les types d'utilisateur CTRL + Z et frappe entrer, ce sera PromptChar () retour? Parce que si je comprends EOF, c'est un int.

Était-ce utile?

La solution

Tout d'abord:

SCANF ne définit pas la langue.
CHAR ne définit pas la langue.

Ok, avec qui de la route ...

La fonction scanf() renvoie un entier. Ce nombre entier est le nombre d'éléments d'entrée attribués ou la valeur de la macro EOF si une panne d'entrée se produit avant la première conversion.
Vous ne l'avez pas vérifier la valeur de retour de l'appel scanf(), donc vous ne savez pas ce qui est arrivé. Tout aurait pu fonctionner ok, ou le flux d'entrée aurait pu se terminer avant la première conversion, ou (pas% c) il y aurait eu un échec de conversion.

Testez la valeur de retour de scanf(). En effet, toujours tester la valeur de retour de toutes les fonctions .

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 retourne une valeur indéterminée de type char.
Vous pouvez suivre l'exemple de la fonction bibliothèque qui traitent des caractères et retourner un entier de promptChar(). Ce serait la valeur du caractère lu CAST pour unsigned char ou un int négatif (EOF) en cas d'erreur. Lisez la description fgetc() , par exemple.

Autres conseils

De la scanf(3) Linux manpage:

«La valeur EOF est renvoyée si la fin de l'entrée est atteint avant que soit la première conversion réussie ou un défaut d'appariement se produit. EOF est également renvoyée si une erreur de lecture se produit, dans ce cas, l'indicateur d'erreur pour le flux (voir ferror(3)) est défini, et une erreur est définie indiquer l'erreur. "

Notez que ce passage concerne la valeur de retour de scanf, pas les paramètres de résultat.

Cela dépend de l'interpréteur de commandes que vous utilisez, mais vous devriez vraiment pas être la conception d'un programme d'attendre à lire les caractères de contrôle à partir d'une invite interactive.

La plupart des obus de commande intercepter certains des caractères de contrôle et les utiliser pour indiquer au shell de faire les choses. Par exemple ctrl-s et ctrl-q commencent souvent et arrêter la diplay du shell de caractères de sortie. ctrl-z sur certaines coquilles sera effectivement prise comme une commande pour fermer la coque vers le bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top