运行

时间:2017-04-19 12:40:49

标签: c++

这个程序是一个非常简单的程序,一个猜谜游戏,但问题是当我编译它时,它没有显示任何错误。当我运行它时,它什么都不做。我已经尝试修复它,因为我将guess()函数中的代码移回main,然后工作,打印"输入介于0和0之间的数字。 100:"。然后,当您输入一个数字时,它会冻结,这可能是由于递归的停止条件不足造成的。因为我没有返回整数,所以我回到使用guess()函数,我不知道为什么它不起作用。

#include <iostream>
#include <cstdlib>
#include <string>

int computer = rand() % 101;
int user = 0;
int counter = 0;
std::string guess();

int main(void) {
  std::string guess();
  return 0;
}

std::string guess() {
  std::cout << "Enter a number between 0 & 100: ";
  std::cin >> user;

  if(!(std::cin >> user)) {
    return "You entered a non-numeric. Try again. Tries will not be added.";
    std::cin.clear();
    std::cin.ignore(10000, '\n');
    std::string guess();
  }

  else {
  if(user == computer) {
    std::cout << "You guessed the right number of " << computer << " in " << counter << " tries.\n";    
  }

  else {
    if(user < computer) {
      return "The answer is higher. Try again.";
    }

    else if(user > computer) {
      return "The answer is lower. Try again.\n";
    }

    counter++;
    std::string guess();
  }
  }
}

请注意,我是一名新手程序员,问题可能非常简单明了,但我无法看到它。感谢。

3 个答案:

答案 0 :(得分:1)

问题是,您经常写std::string guess();来调用guess()方法(例如在main中。但是,这并没有调用该方法。实际上它是什么确实是声明一个永远不会被调用的新函数guess(另请参阅Most vexing parse)。如果您真的想要调用该方法,只需编写guess();auto result = guess();使用返回值。

此部分代码也存在错误(请参阅注释):

 if(!(std::cin >> user)) {
    return "You entered a non-numeric. Try again. Tries will not be added.";
    // the following lines are never executed, since you already returned.
    std::cin.clear();
    std::cin.ignore(10000, '\n');
    std::string guess();
  }

答案 1 :(得分:0)

问题

这个问题确实很简单明了:

std::string guess();

很明显,你想调用你的“猜测”功能,但你只是在“主”内部和“猜测”中声明它。

这些声明类似于您在int counter = 0;之后的下一行所做的声明。它告诉编译器如果遇到对名为“guess”的函数的调用,它应该知道它是一个不带参数的函数并返回std :: string。

所以,问题在于,你没有多次调用函数,而是多次声明它;

解决方案

当你想要调用你的功能时,你应该这样做:

std::string result = guess();

但是,既然你从guess()返回了一些消息,我认为你应该在之后添加输出:

std::cout << result << std::endl;

实际上,我认为最好完全删除返回值。为此,您应该通过以下方式修改“猜测”功能:

  • 将返回类型从std :: string更改为void
  • return替换为std::cout <<

答案 2 :(得分:0)

很多错误。

首先,您不需要std::string guess()返回类型。

所以将void guess()更改为!(cin>>user)

然后使用cin.fail()代替else if

也使用else{ if{ 而不是

guess

要生成随机数,首先初始化seed并且无法全局完成,因此在main中生成随机数并在#include <iostream> #include <cstdlib> #include <string> #include<ctime> int user = 0; int counter = 0; void guess(int computer); int main(void) { srand(time(NULL)); int computer = rand() % 101; guess(computer); return 0; } void guess(int computer) { std::cout << "Enter a number between 0 & 100: "; std::cin >> user; //std::cout<<computer<<std::endl; if(std::cin.fail()) { std::cout<< "You entered a non-numeric. Try again. Tries will not be added."; std::cin.clear(); std::cin.ignore(10000, '\n'); guess(computer); } else if(user == computer) { std::cout << "You guessed the right number of " << computer << " in " << counter << " tries.\n"; return; } if(user < computer) { std::cout<< "The answer is higher. Try again.\n"; } else if(user > computer) { std::cout<< "The answer is lower. Try again.\n"; } counter++; guess(computer); } 函数中传递它。

总结一下这里是代码

plt.show()