这个程序是一个非常简单的程序,一个猜谜游戏,但问题是当我编译它时,它没有显示任何错误。当我运行它时,它什么都不做。我已经尝试修复它,因为我将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();
}
}
}
请注意,我是一名新手程序员,问题可能非常简单明了,但我无法看到它。感谢。
答案 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;
实际上,我认为最好完全删除返回值。为此,您应该通过以下方式修改“猜测”功能:
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()