我正在尝试使用模拟骰子来构建一个非常简单的第一个游戏。
我在第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;
}
答案 0 :(得分:1)
您必须声明并初始化一个名为aiRollResult
的变量,该变量来自函数airoll()
。因此,将函数从返回void
更改为返回int
。解密消息显示;在main
中显示。
答案 1 :(得分:1)
函数内的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;
// ...
答案 2 :(得分:1)
您的变量aiRollResult
未在main()
函数的范围内定义。它仅存在于airoll()
函数的范围内。
将您的airoll()
更改为
int airoll()
{
int aiRollResult=1+(rand()%6);
cout<<"AI roll: "<<aiRollResult<<endl;
return aiRollResult;
}
请注意int
返回类型。
现在您可以在主函数中获得airoll()
的结果,如下所示:
int aiRollResult = airoll();
将调用airoll()
函数,然后将结果存储在变量中。那应该可以解决你的问题。
点击此处了解更多功能:
http://www.cplusplus.com/doc/tutorial/functions/
答案 3 :(得分:1)
这很简单。 aiRollResult
变量是一个局部变量,在其函数括号
要解决此问题,您可以声明一个全局变量并将其初始化为aiRollResult
值
答案 4 :(得分:1)
在您的代码中,我看到:
switch (rollResult) //results options {
[.. bunch of case statements...]
}
airoll();
请注意,{
语句的开头switch
会被//
评论隐藏。
但你仍然有结束}
。
我认为你的大括号不匹配。
您认为关闭switch语句的最后一个大括号实际上正在关闭main。然后airoll();
是任何函数外的函数调用,导致错误。
其他人已经描述了aiRollResult
的范围问题,但我认为这不是您所描述的错误的直接原因。
(当然,如果您在原始问题中发布了 确切错误消息 ,我们可能会更有帮助)
答案 5 :(得分:0)
总结所说的一切,但没有人真正说过一切:
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;
}
此外,关于命名空间污染的评论可能会被考虑在内,但是我们不要进入编码风格的斗争,呃?