2010-05-04 81 views
2

的書中我讀了一個練習的例子顯示了下面的代碼:目標C「做 - 而」

#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)如果我正確理解這一點基本上意味着(input = input/10)。現在,如果這是真的,爲什麼循環不能連續運行?我的意思是,即使你將0除以10,那仍然會提取一個數字。如果用戶輸入「50607」,它將首先切斷「7」,然後切斷「0」等等,但是爲什麼在去掉「5」後退出循環。 「5」之後的響應是否與程序5和6之間的「0」相同?

回答

8

您似乎對/%之間的區別感到困惑。該循環除以input並使用商,而不是餘數。爲了您的50607例如,循環將5次迭代:

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

最後一次迭代之後,input變爲0並且循環結束。