2

私が読んでいる本の演習の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ステートメントは(input / = 10)を示しています。これを正しく理解すれば、基本的に(input = input / 10)を意味します。さて、それが本当なら、なぜループは単に継続的に実行されないのですか?つまり、0を10で割ったとしても、それでも数値が抽出されます。ユーザーが「50607」を入力すると、最初に「7」、次に「0」などが切り捨てられますが、「5」を削除した後にループを終了するのはなぜですか。「5」の後の応答は、プログラムに対する5と6の間の「0」と同じではないでしょうか。

4

1 に答える 1

8

/との違いについて混乱しているようです%。そのループはinput、余りではなく商を分割して使用しています。の例で50607は、ループは5回繰り返されます。

  1. input = 50607
  2. input = 5060
  3. input = 506
  4. input = 50
  5. input = 5

最後の反復の後、にinputなり0、ループが終了します。

于 2010-05-04T04:33:34.217 に答える