2012-02-08 2 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

Подсказка: являются значениями digit и reverse всегда, что вы ожидаете от них? Попробуйте распечатать их на каждой итерации, чтобы вы могли видеть. Или, еще лучше, научитесь использовать отладчик вашей платформы и просто пройдите через него.


Спойлер: вы, вероятно, получите больше возможностей решить его самостоятельно, с намеком выше. Но ... вы не инициализировали reverse до нуля перед запуском. Это было бы хорошей идеей.

1

Я бы на самом деле напечатал int до строки и обратил ее через итерацию по строке в обратном порядке. Подробности см. В sprintf.

0

Я бы отсканировал целое число в строку, используя функцию strlen, чтобы определить ее длину, а затем пересечь ее назад.

Смежные вопросы