c++ - 卡牌游戏程序在进行中。不知道为什么我得到一个随机数-858993460
问题描述
几乎是为班级创建纸牌游戏。不是在寻找直接的答案,而是更好地了解我为什么会遇到问题的材料。感谢我能得到的任何帮助。继承人的问题:
使用struct数据结构创建一个名为flash card的纸牌游戏,每个玩家抽三张随机数(1-4)的牌,分别为钻石、黑桃、梅花和红心,另一组随机数为1-13。cardScore 被定义为最高(比如 cardScore = 100,三个 A (cardValue 1),然后是三个 Jacks(cardValue 11)(比如 cardScore 90),然后是三个 Kings(cardValue 13)(比如 cardScore =80)和然后是三个皇后(cardValue 12)(比如cardScore = 70)。除上述组合外,cardScore由每次抽奖的cardValue之和定义。三抽后得分最高的玩家获胜。显示抽出的牌由每个玩家和cardScore和获胜者
#include "pch.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <math.h>
using namespace std;
class Values
{
public:
string cardFace;
int cardValue;
int cardFaceRng;
int cardValueRng;
private:
};
//declaring functions
void setCardFaceRandom();
void setCardValueRandom();
void setCardFace();
void setCardValue();
int main()
{
Values v;
for (int i = 0; i < 3; i++)
{
v.cardFaceRng = rand() % 3 + 1;
v.cardValueRng = rand() % 14 + 1;
//setCardFaceRandom();
//setCardValueRandom();
setCardFace();
setCardValue();
cout << v.cardFace << " " << v.cardValue << endl;
}
system("pause");
return 0;
}
void setCardFace() {
Values v;
switch (v.cardFaceRng)
{
case 0:
v.cardFace = "Diamond";
break;
case 1:
v.cardFace = "Spade";
break;
case 2:
v.cardFace = "Club";
break;
case 3:
v.cardFace = "Hearts";
break;
}
cout << v.cardFace;
}
void setCardValue() {
Values v;
switch (v.cardValueRng)
{
case 0:
v.cardValue = 2;
break;
case 1:
v.cardValue = 3;
break;
case 2:
v.cardValue = 4;
break;
case 3:
v.cardValue = 5;
break;
case 4:
v.cardValue = 6;
break;
case 5:
v.cardValue = 7;
break;
case 6:
v.cardValue = 8;
break;
case 7:
v.cardValue = 9;
break;
case 8:
v.cardValue = 10;
break;
case 9:
v.cardValue = 11;
break;
case 10:
v.cardValue = 12;
break;
case 11:
v.cardValue = 13;
break;
case 12:
v.cardValue = 14;
break;
}
cout << v.cardValue;
}
void setCardFaceRandom()
{
Values v;
v.cardFaceRng = rand() % 3 + 1;
}
void setCardValueRandom()
{
Values v;
v.cardValueRng = rand() % 14 + 1;
}
解决方案
仅使用其中一个函数作为示例。所有函数都有相同的问题:
void setCardFace() {
Values v;
switch (v.cardFaceRng)
这将在此函数中创建一个名为 的新局部变量v
,并默认构造它。由于Values
该类没有显式构造函数,因此所有类成员都是默认构造的,并且对于int
此类的成员,它们不会被初始化为任何内容。他们是随机垃圾。所以这v.cardFaceRng
是随机垃圾,从这一点开始,它是未定义的行为。
v
此函数中的对象setCardFace()
与v
您在main()
. 在函数内部声明的所有对象都是该函数的局部对象,仅存在于该函数中,并在函数返回时被销毁;并且不同的函数可以有不同的本地对象,它们具有相同的名称,否则,彼此完全独立。
为了让这个setCardFace()
类使用你在你的声明和初始化的对象main()
——正如你明显的意图在这里——你需要将它作为参数显式传递给这个函数,以及你声明的所有其他函数——最好传递它引用。
推荐阅读
- snowflake-cloud-data-platform - 您可以从 Snowflake 的 UI 审核用户导出吗?
- command - 我如何在 Discord.py 中创建一个您 @ 用户的命令并给该用户一个拥抱
- cmake - 为什么 CartographerROS 安装停止并出现“无法找到谷神星”错误?
- google-cloud-storage - 是否可以遍历所有存储文件夹并将所有图像 url 下载到列表/文件中?
- c# - FastColoredTextBox 行号背景色
- kubernetes - 使用运算符创建具有空环境变量的子 Pod 会导致无限循环
- shell - GitLab CICD 转义空格字符中的脚本
- javascript - 从 Axios 获取空数据 Get in React
- ethereum - 区块链上的所有节点都必须执行每个智能合约功能吗?
- android - 在 Android 中设置 RecyclerView 到 FrameLayout 问题