我正在创建一个程序,用户输入整数并反向输出。它是一个递归函数。现在的问题是它输出无穷大的0。请告诉我代码中的错误在哪里。我需要一些指示。请帮忙。
#include <iostream>
using namespace std;
void printreverse(int);
int main()
{
int x;
cout << "Enter numbers: ";
cin >> x;
printreverse(x);
return 0;
}
void printreverse(int x)
{
if(x<10)
cout << x;
else
cout << x%10;
printreverse(x/10);
}
答案 0 :(得分:0)
C ++不是Python。您需要用大括号括起else
块,如此
else
{ // need brace here
cout << x%10;
printreverse(x/10);
} // and here
否则只执行else
之后的第一个语句(并且最终printreverse(x/10)
将始终执行,即使对于0
也是如此,因此最终会溢出堆栈。)< / p>
我建议你总是把括号括起来,即使是if/else
中的单个陈述,也只是出于类似于你碰到的那个原因。
答案 1 :(得分:0)
printreverse
中的身份证明错误。它应该是这样的:
void printreverse(int x)
{
if(x<10)
cout << x;
else
cout << x%10;
printreverse(x/10);
}
首先它打印x或x%10,然后无论x
是什么,它都会递归。如果您希望在结果或替代方案中完成多个语句,则需要使用块。块在C-decendants中用{}
表示。它们很常见,有些人实际上认为条件和控制流语法需要它们。无论如何,如果标识是预期的行为,你应该写它:
void printreverse(int x)
{
if(x<10) {
cout << x;
} else {
cout << x%10;
printreverse(x/10);
}
}
每当我在if
的一个词上使用大括号时,即使不是真的需要,我也会为每个词添加大括号。一些编码标准,比如PSR2,总是要求块来消除这样的错误。