Objectif C « faire - alors que »
-
02-10-2019 - |
Question
L'exemple pour l'un des exercices dans le livre que je lis montre le code suivant:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
int input, reverse, numberOfDigits;
reverse = 0;
numberOfDigits = 0;
NSLog (@"Please input a multi-digit number:");
scanf ("%i", &input);
if ( input < 0 ) {
input = -input;
NSLog (@"Minus");
}
do {
reverse = reverse * 10 + input % 10;
numberOfDigits++;
} while (input /= 10);
do {
switch ( reverse % 10 ) {
case 0:
NSLog (@"Zero");
break;
case 1:
NSLog (@"One");
break;
case 2:
NSLog (@"Two");
break;
case 3:
NSLog (@"Three");
break;
case 4:
NSLog (@"Four");
break;
case 5:
NSLog (@"Five");
break;
case 6:
NSLog (@"Six");
break;
case 7:
NSLog (@"Seven");
break;
case 8:
NSLog (@"Eight");
break;
case 9:
NSLog (@"Nine");
break;
}
numberOfDigits--;
} while (reverse /= 10);
while (numberOfDigits--) {
NSLog (@"Zero");
}
[pool drain];
return 0;
}
Ma question est, le tout montre des états (entrée / = 10) qui, si je comprends correctement ce moyen essentiellement (entrée = entrée / 10). Maintenant, si cela est vrai, pourquoi ne pas la boucle il suffit d'exécuter de façon continue? Je veux dire, même si vous deviez diviser 0 par 10 alors que cela encore extraire un certain nombre. Si l'utilisateur est à l'entrée « 50607 », il faudrait d'abord coupé le « 7 », le « 0 », et ainsi de suite et ainsi de suite, mais pourquoi faut-il sortir de la boucle après le retrait de la « 5 ». Ne serait-réponse après la « 5 » être le même que le « 0 » entre le 5 et le 6 au programme?
La solution
Vous semblez être confus au sujet de la différence entre /
et %
. Cette boucle est divise input
et en utilisant le quotient, pas le reste. Pour votre exemple de 50607
, la boucle va 5 itérations:
-
input = 50607
-
input = 5060
-
input = 506
-
input = 50
-
input = 5
Après la dernière itération, input
devient 0
et la boucle se termine.