Que se passe exactement si je fais ce qui suitComma entre les deux entiers pendant l'entrée
scanf("%d,%d", &i, &j);
et fournir une entrée qui provoque l'échec correspondant? Va-t-il stocker les déchets dans j
?
Que se passe exactement si je fais ce qui suitComma entre les deux entiers pendant l'entrée
scanf("%d,%d", &i, &j);
et fournir une entrée qui provoque l'échec correspondant? Va-t-il stocker les déchets dans j
?
L'entrée doit exactement correspondent le fourni le format pour scanf()
être le succès.
C11
Citant, chapitre §7.21.6.2, fsacnf()
, (Souligné par)
Sauf dans le cas d'un spécificateur
%
, l'élément d'entrée (ou, dans le cas d'une directive%n
, le nombre de caractères d'entrée ) est converti en un type approprié au spécificateur de conversion. Si l'élément d'entrée n'est pas une séquence correspondante, l'exécution de la directive échoue: cette condition est un échec de correspondance. À moins que la suppression d'affectation ait été indiquée par un*
, le résultat de la conversion est placé dans l'objet pointé par le premier argument suivant l'argument de format qui n'a pas déjà reçu un résultat de conversion. Si cet objet n'a pas un type approprié ou si le résultat de la conversion ne peut pas être représenté dans l'objet, le comportement n'est pas défini.
et,
Lorsque toutes les directives ont été exécutées ou si une directive échoue (comme détaillé ci-dessous), la fonction retourne.
Ainsi, la consolidation des cas ci-dessus,
Pour une entrée comme 100, 200
, le balayage sera le succès. Les deux i
et j
contiendront les valeurs données, 100
et 200
, respectivement.
Pour une entrée comme 100 - 200
, le balayage échouera (défaut correspondant) et la teneur en j
restera inchangé, à savoir j
est pas affecté toute valeur par scanf()
opération.
conseil: toujours vérifier la valeur de retour de scanf()
famille de fonctions pour assurer le succès de l'appel de fonction.
Quelle est votre contribution? –
On dirait une duplication de: http://stackoverflow.com/questions/15091284/read-comma-separated-input-with-scanf –
[pourquoi ne pas lire la page de manuel] (https://linux.die.net/ man/3/scanf) –