2010-05-04 31 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并且循环结束。