[英]Simple dice game, error message
我正在尝试使用模拟骰子来构建一个非常简单的第一款游戏。
我在第49行出现错误: if(rollResult>aiRollResult)
。
我确信这是所有if
语句中的一个非常简单的语法错误,但是我无法弄清楚如何解决它,还是不能像我一样在代码中间调用airoll()
函数?
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
using namespace std;
void airoll();
int main() {
int b;
srand(time(0));
//random die roll
int rollResult = 1+(rand()%6);
switch (rollResult) //results options {
case 1: {
cout<<"Your Roll: 1"<<endl;
}
break;
case 2: {
cout<<"Your Roll: 2"<<endl;
}
break;
case 3: {
cout<<"Your Roll: 3"<<endl;
}
break;
case 4: {
cout<<"Your Roll: 4"<<endl;
}
break;
case 5: {
cout<<"Your Roll: 5"<<endl;
}
break;
case 6: {
cout<<"Your Roll: 6"<<endl;
}
break;
}
airoll();
if(rollResult>aiRollResult) {
cout<<"You win!"<<endl;
}
if (aiRollResult>rollResult) {
cout<<"You lose!"<<endl;
}
if (rollResult==aiRollResult) {
cout<<"It's a tie!"<<endl;
}
}
void airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
}
您必须声明并初始化一个名为aiRollResult
的变量,该变量将来自函数airoll()
。 因此将函数从返回void
更改为返回int
。 解耦消息显示; 在main
显示它。
函数内部的aiRollResult
变量:
void airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
}
是该函数的局部变量。 这意味着当函数运行完毕后,该整数将被释放。 我建议您改为返回整数:
int airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
return aiRollResult;
}
现在您可以替换:
airoll();
与:
int aiRollResult = airoll();
并且您被设置。
我还注意到在switch语句中您正在执行以下操作:
case 1: {
cout<<"Your Roll: 1"<<endl;
}
break;
完全不需要封闭支架。 使用这些括号,您可以创建一个内部代码块。仅当在case
语句中声明变量时,此块才有用。
您可以将这些行重写为:
case 1: cout << "Your Roll: 1" << endl; break;
最后,不要用以下方法污染当前名称空间:
using namespace std;
习惯于使用std::
前缀或将您真正需要的内容包括在内:
using std::cout;
using std::endl;
// ...
您的变量aiRollResult
未在main()
函数的范围内定义。 它仅存在于airoll()
函数的范围内。 更改airoll()
到
int airoll()
{
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
return aiRollResult;
}
注意int
返回类型。
现在,您可以在main函数中获得airoll()
的结果,如下所示:
int aiRollResult = airoll();
它将调用airoll()
函数,然后将结果存储在变量中。 那应该解决您的问题。 在此处了解有关功能的更多信息: http : //www.cplusplus.com/doc/tutorial/functions/
这真的很简单。 aiRollResult
变量是一个局部变量,在其函数的括号之外无法看到
为了解决这个问题,您可以声明一个全局变量并将其初始化为aiRollResult
值
在您的代码中,我看到:
switch (rollResult) //results options {
[.. bunch of case statements...]
}
airoll();
注意, switch
语句的开头{
被//
注释隐藏。
但是您仍然有结束语}
。
我认为您的括号不匹配。
您认为正在关闭switch语句的最后一个括号实际上是在关闭main。 然后是airoll();
是任何函数外部的函数调用,从而导致错误。
其他人已经描述了aiRollResult
的范围界定问题,但是我不认为这是您所描述的错误的直接原因。
(当然,如果您在原始问题中发布了确切的错误消息 ,我们可能会更有帮助)
总结一下已经说过的所有内容,但实际上没有人一次全部说过:
switch (rollResult) //results options {
这导致支架不匹配。 将大括号放在评论之前,如下所示:
switch (rollResult) { // results options
尽管从技术上讲这是正确的,但它很糟糕:
case 1: {
cout<<"Your Roll: 1"<<endl;
}
break;
更改为此:
case 1:
cout<<"Your Roll: 1"<<endl;
break;
这对后面的if语句没有任何帮助:
airoll();
使它看起来像这样:
aiRollResult = airoll();
当然,这意味着您必须在声明部分的上方声明aiRollResult。
最后,此函数输出一个值,但您不能使用该值,因为它会立即将该值直接扔进垃圾箱:
void airoll() {
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
}
使它看起来像这样:
int airoll() {
int aiRollResult = 1 + (rand() % 6);
cout << "AI roll: " << aiRollResult << endl;
return aiRollResult;
}
此外,可能会考虑到有关名称空间污染的评论,但我们不要陷入编码风格的斗争中,是吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.