2016-03-02 1 views
-2

J'écris un petit programme de console dans l'objectif-c. Il faut utiliser la méthode scanf pour recevoir le numéro.Quand j'entre un personnage, il va faire une erreur.Alors j'essaie de le résoudre, mais il est entré dans un cycle de la mort! Voir le code suivant, pour m'aider à le résoudre, merci beaucoup!Pourquoi la boucle "scanf" méthode cercle mort dans l'objectif-c lanuguage?

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
     int num1 = 0; 
     NSLog(@"Please input number:"); 
     while (!scanf("%d", &num1)) { 
      fflush(stdin); 
      NSLog(@"Input error,just input number:"); 
     } 
    } 
    return 0; 
} 

Répondre

0

La documentation pour fflush états:

Le fflush() fonction force l'écriture de toutes les données mises en mémoire tampon pour le flux de sortie ou mise à jour à travers la fonction d'écriture sous-jacente du flux . L'état d'ouverture du flux n'est pas affecté.

et vous essayez de vider entrée. Essayez fpurge:

La fonction fpurge() efface toute entrée ou sortie mise en mémoire tampon dans le flux donné.

également ne le font pas écrire !scanf(...). Vérifiez la documentation, cette fonction renvoie un entier, pas un booléen, et la valeur peut être positive ou négative (recherchez la définition de EOF). Une valeur négative indique une erreur, mais l'opérateur ! renvoie false et votre code ne demande pas de nouvelle entrée.

En cas de succès, scanf renvoie le nombre d'éléments analysés avec succès, vérifiez cela.

La documentation de toutes ces fonctions est disponible via Xcode ou la commande man.

HTH