質問
私が読んでいる本のエクササイズの1つの例は、次のコードを示しています。
#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;
}
私の質問はこれです。Whileステートメントは、これを正しく理解している場合(入力=入力 / 10)を正しく理解している場合(入力 / = 10)ことを示しています。さて、それが本当なら、なぜループが継続的に実行されないのですか?つまり、あなたが0を10で割ったとしても、それはまだ数を抽出するでしょう。ユーザーが「50607」を入力する場合、最初に「7」、次に「0」などを切り取りますが、「5」を削除した後、なぜループを終了するのですか。 「5」の後の応答は、プログラムへの5と6の間の「0」と同じではないでしょうか?
解決
あなたは間の違いについて混乱しているようです /
と %
. 。そのループは分割されています input
そして、商は残りではなく、商を使用します。の例のために 50607
, 、ループは5回の反復になります:
input = 50607
input = 5060
input = 506
input = 50
input = 5
最後のイテレーションの後、 input
なります 0
ループは終了します。
所属していません StackOverflow