为什么我不允许提供我的函数参数?

时间:2014-01-29 02:28:53

标签: c++

我无法解决我在这里做错的事情,但是将任何参数放入我的尝试函数会给我一个错误。

#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岁那样向我解释一下。

4 个答案:

答案 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)

  1. 你的功能

    int attempt(int guess)
    ^^^
    

    需要返回int值。

  2. 在主体中调用此功能时,请使用输入参数正确调用,因此请更改

    attempt();
    

    attempt(guess);
    

答案 3 :(得分:0)

您的功能被声明为

int attempt(int guess);

它有1)接受int类型的参数和2)返回int类型的对象。

并且1)没有参数调用

attempt();

2)并且不返回任何int类型的对象。