Pourquoi «exactement» ce code boucle-t-il indéfiniment si vous entrez un caractère non numérique?Questions sur la validation de la saisie utilisateur en Objective-C, numéro vs chaîne
La première question vient parce que je veux apprendre le bon codage défensif. Est-ce que quelqu'un sait un bon moyen de vérifier la saisie des utilisateurs? Mon google-fu m'a échoué. Certaines personnes semblaient être d'avis que si je spécifie %f
dans scanf
que je suis 'exigeant' un ; J'ai vérifié cela, en quelque sorte, en imprimant la valeur de userInput
. En fait, si je commente la boucle do while
, il n'y a pas de problème avec l'exécution du code. Il attribue un 0
à userInput
et poursuit ses activités.
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
float userInput;
float result;
NSLog(@"3X^3 -5x^2 + 6");
do {
NSLog(@"What is x?");
scanf("%f", &userInput);
NSLog(@"userInput = %f", userInput);
} while(userInput == 0);
result = 3 * (userInput * userInput * userInput) - 5 * (userInput * userInput) + 6;
NSLog(@"the result is: %f", result);
[pool drain];
return 0;
}
Ajouter une coche à la réponse de gavinb, si c'était "génial". De cette façon, les futurs intervenants seront encouragés à répondre à vos questions. –
merci, j'essayais de comprendre comment faire cela. – griotspeak