#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void koaneeye(){
static int j=0;
int n,i=0,rev=0;
while( scanf("%d",&n) == 1)
koaneeye();
while(n)
{
i=n%10;
rev=rev*10+i;
n=n/10;
}
printf("%d\n",rev);
}
int main() {
koaneeye();
return 0;
}
对于上述程序
输入:123 223 323 423 523 623
输出: 325767891 326 325 324 323 322 321
为什么会有额外的号码?
答案 0 :(得分:5)
printf语句被调用太多次了。如果您没有读取数据,则需要停止执行。因为无论如何你都在使用递归,所以你不需要循环:
if( scanf("%d",&n) != 1) return;
koaneeye();
答案 1 :(得分:2)
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
void koaneeye(){
static int j=0;
int n = 0, i=0, rev=0; // HERE
int ret = 0;
while((ret = scanf("%d",&n)) == 1)
koaneeye();
if (ret != 1)
return ;
while(n)
{
i=n%10;
rev=rev*10+i;
n=n/10;
}
printf("%d\n",rev);
}
int main() {
koaneeye();
return 0;
}
现在好了!您必须初始化n
,因为:
对于您的上一次输入,while( scanf("%d",&n) == 1)
将为false(我猜这不是一个数字)。因此n
保持不变,但n
具有随机值!所以while(n)
可能是真的,这就是为什么你有这个奇怪的价值。
答案 2 :(得分:1)
最内层的呼叫以无效输入终止。
如果您检测到此情况,则不要再次呼叫koaneeye()
,但仍会继续处理该数据。
同样,我认为if
就足够了,因为迭代是“自我重复”。
所以你应该做
if (scanf("%d",&n) == 1) {
// Succeeded in reading a value - call next before us.
koaneeye();
} else {
return; // refrain from processing bogus input from above.
}
while(n)
...
答案 3 :(得分:0)
更改
while( scanf("%d",&n) == 1)
koaneeye();
到
if( scanf("%d",&n) == 1)
koaneeye();
else
while(n)
{}