2009-06-11 5 views
2

오늘 제가 게시 한 problem에 관한 것입니다. 주어진 번호의 숫자를 확인하고 인쇄하는 프로그램을 만들었습니다. 이 프로그램은 1, 2, 4 자리 (최대 4 개)를 사용할 때 정상적으로 작동하지만 3 자리 숫자를 입력하면 숫자가 잘못 인쇄되고 갑자기 종료됩니다. 이상한 코드 오류

#include <stdio.h> 
#include <stdlib.h> 
#include <digits.h> 
int getDigit(long); 
int main() 
{ 
    int ctr, digits, dig, multiNo, number; 
    printf("Enter the number(4 digits max): "); 
    scanf("%d", &number); 
    printf("\n"); 
    digits = getDigit(number); 
    if (digits == 1) 
    printf("%d\n", number); 
    else    
    { 
    multiNo = pow(10, (digits-1)); 
    ctr = 1; 
    dig = (number/multiNo); 
    printf("%d ", dig);  
    while (ctr < digits) 
    {  
     number %= multiNo; 
     multiNo/= 10; 
     dig = (number/multiNo); 
     printf("%d ", dig); 
     ctr++; 
    } 
    } 
    printf("\n\n"); 
    system("PAUSE"); 
    return 0; 
} 

int getDigit(long num) 
{ 
    long divider = 10; 
    int digit, i; 
    for (i=1; i<=9; i++) 
    { 
    digit = (num/divider); 
    if (digit == 0) 
     break; 
    else 
     divider *= 10; 
    } 
    return i; 
} 

죄송합니다

, 나는 ..

+3

어쨌든 getDigit (int) 함수를 게시하여이 코드를 컴파일하고 실행할 수 있습니까? 그 함수가 getNumberOfDigits (int)를 수행하고있는 것처럼 보입니다. 그러나 우리는 완전히 확신 할 수 없습니다. – Novelocrat

+1

출력이란 무엇입니까? – ralphtheninja

+0

프로그램이 작동합니다. – ralphtheninja

답변

2

은 분명히 코드가 잘 보이는 형식을 너무없는, 인터넷을 탐색 전화를 사용하고 있습니다 .. 저를 도와주세요. 반환 값 getDigit(number);을 확인하십시오.

나는 단지 digits = 3/*getDigit(number)*/;으로 하드 코딩되었으며 코드는 3 자리 숫자에 대해 적절한 값을 인쇄하고있었습니다.

1

getDigit() 함수가 없으므로 버전을 3으로 돌려 놓았으므로 3 자리 숫자를 테스트 할 수 있습니다. 내 생각 엔 당신의 getDigit()가 엉망입니다.

프로그램은 정상적으로 작동합니다.

+0

죽음의 오렌지 막대와 똑같은 대답 = / – ralphtheninja

0

에 메인의 상단을 변경 :

// printf("Enter the number(4 digits max): "); 
// scanf("%d", &number); 
for(int x=1;x<10000;x++){ 
    number=x; 

과} 하단에있는 숫자의 길이 나를 위해 작동하는 것 같다.

그것은 나를 위해 작동
0

하지만 당신은 당신이 '펑'즉

multiNo = pow((double)10, (digits-1)); 
0

간단한 논리에 첫 번째 매개 변수에 전달하는 형식 명확히해야합니다 게으른 프로그래머로

void print_digits(unsigned number) { 
    unsigned next = number/10; 
    if (next) { 
     print_digits(next); 
    } 

    printf("-%d-", number % 10); 
    return; 
} 
0

를, 나는 이 방법으로 숫자를 인쇄 할 수 있습니다 :

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int main() 
{ 
    char Digits[ 129 ]; 
    printf("Enter digits: "); 
    gets(Digits); 
    if(strlen(Digits) < 1) 
    { 
    printf("\nNo digits!"); 
    system("PAUSE"); 
    return 0; 
    } 
    printf("Number of digits: %d\n\n", strlen(Digits)); 
    for(int Loop = 0; Loop < strlen(Digits); Loop++) 
    printf("Digit %d: %d\n", Loop, Digits[ Loop ]); 
    system("PAUSE"); 
    return 0; 
}