2012-02-08 6 views
1

첫째, 숙제가 주어지기 때문에 C로 프로그래밍하는 것이 매우 익숙합니다. 사용자가 정수를 넣으려고합니다. 다음 해당 정수의 각 자리는 다음과 같은 새 줄에 인쇄되어 있습니다 :정수의 숫자 순서를 반대로하려고하면 추가 숫자가 표시됩니다.

Enter integer: 1234 
The digits are: 
1 
2 
3 
4 

내 문제는 당신이 입력, 어떤 이유로 7과 4 월말에 추가됩니다 어떤 정수이다. 문제의

#include <stdio.h> 
#define Success 0 

int main() 
{ int integer; 
    int reverse; 
    int digit; 

    printf("Enter Integer: "); 
    scanf("%d", &integer); 

    /* Reverse the numbers in the integer */ 
    while (integer != 0) { 
    digit = integer%10; 
    reverse = (reverse * 10) + digit; 
    integer = integer/10; 
    } 

    /* Print the numbers of the reverse integer, in reverse order */ 
    while (reverse != 0) { 
    digit = reverse%10; 
    printf("%d\n", digit); 
    reverse = reverse/10; 
    } 

return Success; 
} 

예 :

Enter Integer: 12345 
1 
2 
3 
4 
5 
7 
4 

사람이 결과가 발생할 수 있습니다 무엇인지에 어떤 아이디어가 아래에 내 코드와 문제의 예입니다? reverse을 인쇄하여 첫 번째 while 루프의 문제점을 줄였습니다.

답변

4

역방향이 초기화되지 않았습니다. 즉, 터치 할 때 변수에 값이있을 수 있습니다. 그것을 선언하고 무슨 일이 일어 났는지보고 난 후에 그것을 0으로 설정하십시오.

+0

신인이 된 실수입니다. 감사합니다! –

+1

'-Wall'로 컴파일하면, 경고 메시지는 이것을 문제로 제안합니다. 이 버그를 잡는 데 도움이되므로 모든 경고와 함께 컴파일하는 것이 좋습니다. –

+0

나는 그랬다. 그리고 그것은 나에게 그것을 경고하지 않았다, 그렇지 않으면 나는 아마 그것을 이해했을 것이다. 그것이 내가 잠시 머물렀을 것이라고 생각했기 때문에 거기에 임의의 쓰레기가있을 것이라는 생각조차하지 않았습니다. –

3

한 가지 문제는 reverse 요구가 초기화 될 것입니다 :

reverse = 0; 
1

확인 reverse의 초기 값 (힌트 : 하나가 아니다). 지금은 쓰레기로 시작하고 있습니다.

2

힌트 : digitreverse의 값은 항상 예상되는 것입니까? 반복 할 때마다 인쇄하여보십시오. 또는 플랫폼의 디버거를 사용하여 단계별로 실행하는 방법을 배우십시오.


스포일러 : 위의 힌트와 함께 직접 해결할 수 있습니다. 하지만 ... 시작하기 전에 reverse을 0으로 초기화하지 않았습니다. 그것은 좋은 생각 일 것입니다.

1

나는 실제로 int에 문자열을 인쇄하고 역순으로 문자열을 반복하여 역순으로 처리합니다. 자세한 내용은 sprintf를 참조하십시오.

0

정수를 문자열로 스캔하고 strlen 함수를 사용하여 길이를 확인한 다음 역순으로 탐색합니다.

관련 문제