2012-02-08 55 views
1

首先,這是一項家庭作業,我非常習慣用C語言編程。我試圖完成的是用戶輸入一個整數,然後該整數的每個單獨的數字被印刷在一個新行,象下面這樣:嘗試顛倒整數中的數字順序,顯示額外的數字

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

我的問題是,無論整數你輸入,由於某種原因,A 7和A 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

什麼菜鳥的錯誤,謝謝! – 2012-02-08 18:20:51

+1

如果使用'-Wall'進行編譯,則警告消息會將此視爲問題。我建議編譯所有警告,因爲它有助於捕捉這些錯誤。 – 2012-02-08 18:32:10

+0

我是的,它沒有警告我,否則我可能會想出來。因爲我認爲我會一直困住這一點,甚至沒有想到會有一些隨機垃圾。 – 2012-02-08 23:57:33

3

一個問題是,reverse需要初始化:

reverse = 0; 
1

檢查的reverse初始值(提示:沒有之一)。現在它開始於垃圾。

2

提示:digitreverse的值是否總是您期望的值?嘗試每次迭代打印出來,以便您可以看到。或者,更好的是,學會使用平臺的調試器,並逐步完成。


擾流板:你可能會得到更多的自己解決它,與上面的提示。 但是......在開始之前,您沒有將reverse初始化爲零。這將是一個好主意。

1

我實際上將int打印到一個字符串,並通過以相反順序遍歷字符串來反轉。有關詳細信息,請參閱sprintf。

0

我會將整數掃描到一個字符串中,使用strlen函數來確定它的長度,然後向後遍歷它。