首先,这是一个家庭作业,我对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循环的问题。
答案 0 :(得分:4)
未初始化反向。这意味着当您开始触摸该变量时,该变量中可能存在任何值。声明后将其设置为0,看看会发生什么。
答案 1 :(得分:3)
一个问题是reverse
需要初始化:
reverse = 0;
答案 2 :(得分:2)
提示:digit
和reverse
的值始终是您期望的值吗?尝试每次迭代打印出来,这样你就可以看到。或者,更好的是,学习使用平台的调试器,然后单步执行它。
剧透:你可能会通过上面的提示自己解决这个问题。
但是......在开始之前你没有将reverse
初始化为零。那将是一个好主意。
答案 3 :(得分:1)
检查reverse
的初始值(提示:没有一个)。现在它开始是垃圾。
答案 4 :(得分:1)
我实际上会将int打印到字符串中,并以相反的顺序迭代字符串来反转它。有关详细信息,请参阅sprintf。
答案 5 :(得分:0)
我会将整数扫描成一个字符串,使用strlen函数确定其长度,然后向后遍历它。