这是有问题的功能。有问题的变量是count1
。在return count1;
之前,该功能似乎将count1重置为1或2。最后cout
行的结果为n行,其中n =包含正确答案的尝试次数。每行输出一个比下一行高1的数字,直到count1
= 1或2。我无法建立最终输出的模式。
问题本身就是占位符。
到底是怎么回事?
注意:我是一个非常新的程序员,并且我知道可能有更有效的方式来做我尚未学习的工作。我愿意接受建议,但是我对C++的不熟悉可能会妨碍我对这些建议的理解。
int q1(int count1) //q1() is always fed a value of 1.
{
using namespace std;
if (count1 <= 3) //User gets 3 tries to answer for full credit.
{ //count1 is returned in order to determine user score.
cout << "What is 2+2 \n"; //problem appears to occur between here and the end of this if statement.
double a1;
cin >> a1;
if (a1 == 4)
{
cout << "Yup. You know what 2+2 is. \n\n";
}
else
{
wrong(); //wrong() is a single line void function using std::cout and nothing else.
q1(++count1);
}
}
else
{
cout << "You have used all three tries. Next question. \n\n";
++count1; //count1 is incremented for an if statement in int main()
}
cout << count1 << "\n"; //This line is strictly for debugging
return count1;
}
最后
cout
行的输出看起来像这样:5
4
3
2
没有
\n
5432编辑:
下面有一个答案由于某种原因被删除,似乎可以解决我的问题。
答案说我应该用
q1(++count1)
替换count1 = q1(++count1);
在我看来,这应该行不通,但实际上它似乎行得通。为什么?
最佳答案
使用递归时,函数第一次运行count1时为1(如您所说)。如果用户回答正确,则您的函数将返回1,因为count1的值不会改变。
如果用户回答错误,则count1增加1并将其值提供给新函数(相同类型)。请记住,您传递了count1的值,这意味着新函数(第二个q1()
)将获得数字2,但将具有一个新变量count1
。它们可能具有相同的名称,但是它们是不同的变量。
有两种方法可以解决您的问题:
通过使用指针,可以通过这种方式传递count1的地址,并且每个函数都更改相同的变量。 (这是最困难的方法,而不是最有效的方法)或
您可以像这样进行while
而不是进行递归调用:
int q1(int count1)
{
using namespace std;
while (count1 <= 3) //Run as long as user has chances
{
cout << "What is 2+2 \n";
double a1;
cin >> a1;
if (a1 == 4)
{
cout << "Yup. You know what 2+2 is. \n\n";
//Using `break` you stop the running `while` so the next
//step is for the function to return
break;
}
else
{
wrong();
//By incrementing `count1` the next time the `while` runs
//if user ran out of tries it will not enter the loop, so
//it will return `count1` which would most likely be 4
count1++;
}
}
//Here the function is about to return, so you check if user won or lost
if (count1 == 4)
cout << "You have used all three tries. Next question. \n\n";
//Debug
cout << count1 << "\n";
//Return
return count1;
}
关于c++ - 递增的int在函数结尾处重置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34100824/