2010-05-04 5 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을 나누고 나머지를 사용하지 않고 몫을 사용합니다. 마지막 반복 후

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

, input이된다 : 50607 당신의 예를 들어, 루프는 5 반복 간다과 루프가 끝납니다.