gpt4 book ai didi

c++ - 我正在尝试制作一个程序,只显示 2 名玩家在拼字游戏中开始使用的牌,但它一直崩溃?

转载 作者:行者123 更新时间:2023-11-28 03:19:34 24 4
gpt4 key购买 nike

我正在开发的这个程序类似于拼字游戏。下面的这个程序是一个“迷你程序”,但是它应该能够为两个玩家打印出 7 个起始牌。这个小程序看起来应该可以完全运行,但它只是崩溃了。你们知道为什么它不运行吗?非常感谢您的宝贵时间! :D

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
#include <ctime>
#include <cctype>
using namespace std;

void selectTiles(char (*lettArray)[53], char (*playPieces)[8], char (*compPieces)[8])
{
int pP1, pP2, pP3, pP4, pP5, pP6, pP7;
int cP1, cP2, cP3, cP4, cP5, cP6, cP7;
//0000000

srand(time(NULL));
rand();

pP1=rand()%53;
(*playPieces)[0]=(*lettArray)[pP1];
strcpy((lettArray)[pP1],"*");

do{
pP2=rand()%53;
(*playPieces)[1]=(*lettArray)[pP2];

}while(strcmp((lettArray)[pP2],"*")==0);

do{
pP3=rand()%53;
(*playPieces)[2]=(*lettArray)[pP3];
}while(strcmp((lettArray)[pP3],"*")==0);

do{
pP4=rand()%53;(*playPieces)[3]=(*lettArray)[pP4];
}while(strcmp((lettArray)[pP4],"*")==0);

do{
pP5=rand()%53;(*playPieces)[4]=(*lettArray)[pP5];
}while(strcmp((lettArray)[pP5],"*")==0);

do{
pP6=rand()%53;(*playPieces)[5]=(*lettArray)[pP6];
}while(strcmp((lettArray)[pP6],"*")==0);

do{
pP7=rand()%53;(*playPieces)[6]=(*lettArray)[pP7];
}while(strcmp((lettArray)[pP7],"*")==0);

do{
cP1=rand()%53;(*compPieces)[0]=(*lettArray)[cP1];
}while(strcmp((lettArray)[cP1],"*")==0);

do{
cP2=rand()%53;(*compPieces)[1]=(*lettArray)[cP2];
}while(strcmp((lettArray)[cP2],"*")==0);

do{
cP3=rand()%53;(*compPieces)[2]=(*lettArray)[cP3];
}while(strcmp((lettArray)[cP3],"*")==0);

do{
cP4=rand()%53;(*compPieces)[3]=(*lettArray)[cP4];
}while(strcmp((lettArray)[cP4],"*")==0);

do{
cP5=rand()%53;(*compPieces)[4]=(*lettArray)[cP5];
}while(strcmp((lettArray)[cP5],"*")==0);

do{
cP6=rand()%53;(*compPieces)[5]=(*lettArray)[cP6];
}while(strcmp((lettArray)[cP6],"*")==0);

do{
cP7=rand()%53;(*compPieces)[6]=(*lettArray)[cP7];
}while(strcmp((lettArray) [cP7],"*")==0);

//0000000

}

int main()
{
char lettArray[53]="AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ";
char (*pLetters)[53]=&lettArray;

char player[8];
char (*pPlayer)[8]=&player;

char computer[8];
char (*pComputer)[8]=&computer;
selectTiles(pLetters,pPlayer,pComputer);

for (int i=0;i<53;i++)
cout<<"|"<<lettArray[i]<<"|";

cout<<endl;

for (int i=0;i<8;i++)
cout<<"|"<<player[i]<<"|";

cout<<endl;


for (int i=0;i<8;i++)
cout<<"|"<<computer[i]<<"|";

cout<<endl;
system("pause");
}

最佳答案

我在 Cygwin 下的 g++ 版本 4.5.3 上编译了这个程序,并且在更改了 #include <string> 之后至 #include <cstring>它编译并运行没有明显问题。

但是,当我查看输出时,很明显程序正在为每个玩家的拼字游戏字母写入 8 个字母而不是 7 个字母,并且每组中的最后一个字母来自之前未分配的内存。

因此,我建议这样的行:

for (int i=0;i<8;i++)

...应该是:

for (int i=0;i<7;i++)

可能还有其他我尚未发现的错误。

(编辑)

行:

对于 (int i=0;i<53;i++)

... 还打印一个额外的字符。应该是:

对于 (int i=0;i<52;i++)

此外,放大 Beta 关于使用 strcpy 的观点, strcpy(dest,"*")将复制两个字符到dest指向的地址,没有一个字符。也就是说,它将复制“*”终止字符串的空值。这可能会覆盖不打算用 null 覆盖的数据。

关于c++ - 我正在尝试制作一个程序,只显示 2 名玩家在拼字游戏中开始使用的牌,但它一直崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15858577/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com