我无法解决我在这里做错的事情,但是将任何参数放入我的尝试函数会给我一个错误。
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int guesses = 0;
int attempt(int guess) {
if(guesses > 0) {
cout << "Take a guess!";
cout << endl;
cin >> guess;
}
}
int main() {
int answer = (rand() % 10) + 1;
int guess;
srand(time(0));
cout << "I am thinking of a number between 1 and 10. Try to guess it in 3 attempts!";
cout << endl;
attempt();
cin.get();
return 0;
}
我应该补充说我是初学者,所以请像5岁那样向我解释一下。
答案 0 :(得分:3)
你最好用以下的东西:
int attempt() {
int guess;
cout << "Take a guess!\n";
cin >> guess;
return guess;
}
和使用以下方式调用:
guess = attempt();
将当前guess
传递给尝试是没有意义的,如果它是一个参考参数,它只会被反射回调用者,而不是。
我也不是完全确定你想要获得什么,只是在猜测已经做出猜测时才猜到,但那是旧代码的影响。
您可能遇到的其他问题:
您在rand
之前致电srand
。这意味着您将在每次运行时获得相同的随机数,因为没有设置种子的rand
的行为就像您调用srand(1)
一样。
guesses
变量设置为零,永不改变。当你开始实现“仅三个猜测”功能时(假设有main
中的循环),你可能会解决这个问题。
答案 1 :(得分:1)
使用值参数声明函数时,例如
void func(int i)
您要声明输入。
#include <iostream>
void func(int i)
{
// the 'i' you see here is a local variable.
i = 10;
// we changed the local thing called 'i', when
// we exit in a moment that 'i' will go away.
}
int main()
{
int i = 1;
func(i);
// if we print 'i' here, it will be our version of i.
std::cout << "i = " << i << '\n';
return 0;
}
i
的{{1}}参数是func
的本地参数;这使新的C ++程序员感到困惑,特别是在上面的场景中,看起来你将func
本身传递给func而不是传递 main :: i 的值。
随着您进一步深入C / C ++,您将发现'reference'和'pointer'类型,它们允许您实际将变量转发给函数而不是它们的值。
当你的函数真正做的是获取用户输入值然后将其传递回调用者或返回它时。
i
我们告诉编译器“尝试”不带参数,并且返回一个int值。然后在函数结束时我们使用int attempt()
{
std::cout << "Take a guess!\n";
int guess;
std::cin >> guess;
return guess;
}
来做到这一点。
return
只能传回一个值 - 再次,您将学习指针和引用,这将允许您返回大于单个值的内容。
要将此值接收到您的主要内容:
return
或者你可以打破变量声明并使用两行:
int main() {
int answer = (rand() % 10) + 1;
srand(time(0));
std::cout << "I am thinking of a number between 1 and 10. Try to guess it in 3 attempts!";
std::cout << endl;
int guess = attempt();
std::cout << "You guessed: " << guess << '\n';
cin.get();
return 0;
}
从这一切中取消的关键是你可以在不同的“范围”中使用相同名称的不同变量:
int guess;
...
guess = attempt;
答案 2 :(得分:0)
你的功能
int attempt(int guess)
^^^
需要返回int
值。
在主体中调用此功能时,请使用输入参数正确调用,因此请更改
attempt();
到
attempt(guess);
答案 3 :(得分:0)
您的功能被声明为
int attempt(int guess);
它有1)接受int类型的参数和2)返回int类型的对象。
并且1)没有参数调用
attempt();
2)并且不返回任何int类型的对象。