- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不确定是什么导致了这个问题,我正在创建一个井字游戏,您可以在其中与计算机对战。
我没有尝试过任何东西,因为我不知道这个错误是什么意思。
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cmath>
#include <time.h>
using namespace std;
void InitializeBoard(int *gameBoard);
void InitializeTurns(int &whosturnisit,int &turnsTaken);
void InitializegameBoard (int *gameBoard);
void DrawScreen (int *gameBoard);
void taketurnplayer(int *gameBoard,int &turnsTaken,int &whosturnisit);
void taketurncomputer(int *gameBoard,int turnsTaken,int whosturnisit);
int checkforwinner(int *gameBoard);
void displayWinner (int &whoWins);
int main()
{
int gameBoard[10];
int whosturnisit, turnsTaken, whoWins;
InitializeTurns(whosturnisit,turnsTaken);
InitializegameBoard(gameBoard);
DrawScreen (gameBoard);
do
{
if (whosturnisit==1)
taketurnplayer(gameBoard,turnsTaken,whosturnisit);
else
taketurncomputer(gameBoard,turnsTaken,whosturnisit);
DrawScreen(gameBoard);
whoWins=checkforwinner(gameBoard);
}while ( (turnsTaken<9) && (whoWins==0) );
displayWinner(whoWins);
return 99;
}
void InitializegameBoard (int *gameBoard)
{
for (int i=0;i<=9;i++)
gameBoard[i]=0;
return;
}
void InitializeTurns(int &whosturnisit, int &turnsTaken)
{
string i=0;
whosturnisit=0;
turnsTaken=0;
cin>>i;
if (i=="yes")
whosturnisit=1;
else
whosturnisit=2;
return;
}
void DrawScreen(int *gameBoard)
{
system("cls");
for (int i=1;i<11;i++)
cout<<gameBoard[i];
return;
}
void taketurnplayer(int *gameBoard,int &turnsTaken,int &whosturnisit)
{
int x=0;
do
{
cout<<"where would u like to place your x";
cin>>x;
}while (gameBoard[x]!=0);
gameBoard[x]=1;
whosturnisit=2;
turnsTaken++;
return;
}
void taketurncomputer(int*gameBoard, int turnsTaken, int whosturnisit)
{
int spot=0;
do
{
spot=1+(std::rand()%(9-1+1));
}while (gameBoard[spot]!=0);
gameBoard[spot]=2;
whosturnisit=1;
turnsTaken++;
return;
}
checkforwinner (int*gameBoard)
{
int thewinneris=0;
if((gameBoard[1]==gameBoard[2])&&(gameBoard[2]==gameBoard[3])&&(gameBoard[3]!=0))
thewinneris=gameBoard[1];
else if ((gameBoard[4]==gameBoard[5])&&(gameBoard[5]==gameBoard[6])&&(gameBoard[6]!=0))
thewinneris=gameBoard[4];
else if ((gameBoard[7]==gameBoard[8])&&(gameBoard[8]==gameBoard[9])&&(gameBoard[9]!=0))
thewinneris=gameBoard[7];
else if ((gameBoard[1]==gameBoard[5])&&(gameBoard[5]==gameBoard[9])&&(gameBoard[9]!=0))
thewinneris=gameBoard[1];
else if ((gameBoard[2]==gameBoard[5])&&(gameBoard[5]==gameBoard[8])&&(gameBoard[8]!=0))
thewinneris=gameBoard[2];
else if ((gameBoard[1]==gameBoard[4])&&(gameBoard[4]==gameBoard[7])&&(gameBoard[7]!=0))
thewinneris=gameBoard[1];
else if ((gameBoard[3]==gameBoard[6])&&(gameBoard[6]==gameBoard[9])&&(gameBoard[9]!=0))
thewinneris=gameBoard[3];
else if ((gameBoard[3]==gameBoard[5])&&(gameBoard[5]==gameBoard[7])&&(gameBoard[7]!=0))
thewinneris=gameBoard[3];
return thewinneris;
}
void displayWinner(int &whoWins)
{
cout<<whoWins;
}
视觉效果还没有完成,但我认为程序现在应该可以运行了。我不断从终端收到的错误是:
在抛出“std::logic_error”实例后调用终止 what(): basic_string::_M_construct null 无效
进程返回 3 (0x3) 执行时间:0.884 秒按任意键继续。
感谢任何帮助,谢谢!
最佳答案
改变
std::string i = 0;
和 friend
std::string i;
这将产生空字符串。当你这样做的时候,考虑给字符串一个有意义的标识符,比如 input
或 yes_no
。这在以后调试时可能会有很大帮助,并且描述性代码大大减少了注释的需要。
std::string i = 0;
和 friend 。
这是一个初始化,因此调用了构造函数。
std::string
没有可以转换整数的构造函数,但它确实有一个构造函数,该构造函数将采用指向字符数组的指针,不幸的是,0 的整数文字看起来就足够了就像 NULL
指针的旧定义
#define NULL 0
调用它而不是发出编译器错误。
用 NULL 指针构造 std::string
几乎是立即致命的,因此 string
构造函数捕获它并抛出异常。
std::string i = 1;
没有这个问题。编译器立即拒绝它,因为 1 和指针或任何其他可用于初始化 string
的历史值之间没有等价性。
稍后在代码中注意 checkforwinner (int*gameBoard)
。看起来缺少返回类型。您需要修复此问题,因为该程序未按预期运行。
可能会有一个编译器警告。如果有,请不要忽略警告。它们是防止逻辑错误的第一道防线,因此如果您希望看到更多警告,以便您可以在它们变得难以诊断的运行时问题之前修复它们。查看您的编译器文档,了解如何调高警告级别,然后调高LOUD!
关于c++ - 如何修复在抛出 'std::logic_error' what() 实例后调用的终止:basic_string::_M_construct null 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56552148/
如果我终止应用程序,我在尝试保持我的功能运行时卡住了。 是否可以在应用程序未运行时保持核心位置(地理围栏/地理定位)和核心蓝牙运行?如果可能如何解决我的问题?我已经检查了背景模式,并实现了核心定位方法
该程序要求用户输入一个数字,然后从列表中返回详细信息。我该怎么做? do { Scanner in = new Scanner(System.in);
我正在开发一个内部分发的 iOS 应用程序(即,没有应用程序商店),我希望能够以恒定的 10 分钟间隔报告设备的位置。 无论如何,我在我的 plist 中包含了 location 作为字段 UIBac
我的 mongodb 服务器突然收到信号 15(终止)。我不知道为什么 mongodb 崩溃了。以下是日志消息。 Mon Jun 27 07:33:31.701 [signalProcessingTh
我按顺序运行了一堆malloc,并且每次都检查以确保它是成功的。像这样: typedef struct { int *aray; char *string; } mystruct; m
这个问题已经有答案了: How to stop a running pthread thread? (4 个回答) 已关闭 8 年前。 可以使用 pthread_join() 停止线程。但让我们想象一
#include #include #include struct node{ char data; int p; struct node *ptr; }; struct node *st
这个问题已经有答案了: Why should I use a semicolon after every function in javascript? (9 个回答) 已关闭 8 年前。 好吧,我问
我有一个启动多个工作线程的函数。每个工作线程都由一个对象封装,该对象的析构函数将尝试加入线程,即调用if (thrd_.joinable()) thrd_.join();。但是,每个 worker 必
我正在实现一个应用程序,当用户摇动手机时,该应用程序会监听并采取行动。 所以我实现了以下服务: public class ShakeMonitorService extends Service {
我在使用 Xcode 时遇到问题,其中弹出错误“Source Kit Service Terminated”,并且所有语法突出显示和代码完成在 Swift 中都消失了。我怎样才能解决这个问题? 这是一
我想为我的控制台应用程序安全退出,该应用程序将使用单声道在 linux 上运行,但我找不到解决方案来检测信号是否发送到它或用户是否按下了 ctrl+c。 在 Windows 上有内核函数 SetCon
关键: pthread_cancel函数发送终止信号pthread_setcancelstate函数设置终止方式pthread_testcancel函数取消线程(另一功能是:设置取消点) 1 线程取消
下面的程序在不同的选项级别下有不同的行为。当我用 -O3 编译它时,它永远不会终止。当我用 -O0 编译它时,它总是很快就会终止。 #include #include void *f(void *
我有 3 个节点的 K8S 集群,我创建了 3 个副本 pod,应用程序 app1 在所有 pod 上运行,我通过运行 service yaml 文件建立了服务,我可以看到通过运行 kubectl g
我打算使用 nginx 来代理 websocket。在执行 nginx reload/HUP 时,我知道 nginx 等待旧的工作进程停止处理所有请求。然而,在 websocket 连接中,这可能不会
在 Ubuntu 9.10 上使用 PVM 3.4.5-12(使用 apt-get 时的 PVM 包) 添加主机后程序终止。 laptop> pvm pvm> add bowtie-slave add
我编写了一个应用程序来从 iPhone 录制视频。它工作正常,但有一个大问题。当 AVCaptureSession 开始运行并且用户尝试从其库(iPod)播放音频时。此操作将使 AVCaptureSe
我将如何使用NSRunningApplication?我有与启动应用程序相反的东西: [[NSWorkspace sharedWorkspace] launchApplication:appName]
我正在使用 NSTask 执行一系列长时间运行的命令,如下所示: commandToRun = @"command 1;command2"; NSArray *arguments = [NSArray
我是一名优秀的程序员,十分优秀!