2012-02-08 52 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函数来确定它的长度,然后向后遍历它。