10
votes

Pendant que SCANF! = EOF ou SCANF == 1?

CETERIS Paribus (données bien formées, bonnes pratiques tampon et quoi non), y a-t-il une raison pour laquelle je préfère faire boucle pendant que le retour du scanf est 1, plutôt que ! eof ? J'ai peut-être lu cela quelque part, ou peu importe, mais je peux l'avoir mal. Que pensent les autres?


4 commentaires

Un peu connexe: Stackoverflow.com/questions/2970880 / Utilisation-Scanf-in-A-Whol-L oop


@Steve: heh. Le monde universitaire vous fait ça ... jamais remarqué, et une bonne touche en italique en italique ... vous venez également d'un académie aussi. :)


Je n'ai peur pas - juste une éducation scolaire anglaise solidement traditionnelle dans les années 70.


Si c'était les infâmes "écoles de grammaire", vous gagnez. Les écoles anglaises l'emportent sur quelque chose dans le système éducatif de langue anglaise. :)


3 Réponses :


14
votes

scanf code> renvoie le nombre d'éléments convertis avec succès ... ou EOF sur erreur. Alors, code la condition de la façon dont il a du sens. XXX PRE>

Exemple de contreveillé P>

int a[5], b[5];
printf("Enter up to 5 pairs of numbers\n");
scanfresult = scanf("%d%d%d%d%d%d%d%d%d%d", a+0,b+0,a+1,b+1,a+2,b+2,a+3,b+3,a+4,b+4);
switch (scanfresult) {
case EOF: assert(0 && "this didn't happen"); break;
case 1: case 3: case 5: case 7: case 9:
    printf("I said **pairs of numbers**\n");
    break;
case 0:
    printf("What am I supposed to do with no numbers?\n");
    break;
default:
    pairs = scanfresult / 2;
    dealwithpairs(a, b, pairs);
    break;
}


0 commentaires

1
votes

dépend de ce que vous voulez faire avec une entrée mal formée - si votre motif de numérisation n'est pas apparié, vous pouvez obtenir 0 retourné. Donc, si vous gérez ce cas à l'extérieur de la boucle (par exemple, si vous le traitez de la même manière qu'une erreur d'entrée), comparez-le avec 1 (ou si nombreux articles sont dans votre appel scanf).


0 commentaires

0
votes

de http://www.cplusplus.com/reference/clibrary/cstdio/ scanf /

sur le succès, la fonction renvoie la Nombre d'articles lu avec succès. Cette le nombre peut correspondre au nombre attendu de lectures ou moins, même zéro, si un Une défaillance correspondante se produit. Dans le cas d'une défaillance d'entrée avant toute donnée pourrait être lu avec succès, EOF est retourné.

Le seul moyen d'être sûr que vous lisez le nombre d'éléments destinés à comparer la valeur de retour à ce numéro.


1 commentaires

Le texte cité est incorrect. Articles Lisez (mais non stocké) à l'aide de formats tels que % * d sont non comptés dans la valeur de retour. www.cplusplus.com ne semble pas être une bonne source pour des informations précises sur la bibliothèque standard C. Si vous souhaitez une référence en ligne, vous pouvez créer un lien vers, POSIX est faisant autorité; Pour les fonctions C standard avec des extensions POSIX, il dispose des pièces d'extension marquées dans les blocs "CX". Voir OpenGroup.org/onlinePubs/9699919799/fonctions/scanf.html