テキストファイルから読み込んだデータをもとに問題を出題し入力された解答に対して正誤判定を行うというプログラムを作ろうと思っています。
テキストファイルを読み込もうとしてLoadクラスを作って実行しようとしたら起動直後にDebug Assertion Failed!と表示されてしまいました。なぜでしょうか?
添付ファイルに読み込む予定のテキストファイルを載せています。
今回はロードに関するソースコードとそれに伴い変更したコードのみを載せています
その他のファイルはhttp://dixq.net/forum/viewtopic.php?f=3&t=18326に載っています。
環境 windows10,visualstudio2015community,C++,Dxライブラリ使用
以下コードです
StateTransition.h
#pragma once
#include "ScreenTransition.h"
#include "TitleScreen.h"
#include "ChoiceScreen.h"
#include "Load.h"//一時的
class StateTransition{
private:
int NowStateNum;
int BackScreenGh;
ScreenTransition* screen[4];
TitleScreen titleS;
ChoiceScreen choiceS;
Load* load;//一時的
public:
StateTransition();
~StateTransition();
void Draw();
void Transition();
};
#include "StateTransition.h"
#include "Common.h"//完成後必要ない
#include "Keyboard.h"
#include "DxLib.h"
StateTransition::StateTransition(){
NowStateNum = 0;
BackScreenGh= LoadGraph("Graph/backscreen.png");//640*400
screen[0] = &titleS;
screen[1] = &choiceS;
load = new Load;
}
void StateTransition::Draw(){
DrawGraph(0, 0, BackScreenGh, TRUE);
}
void StateTransition::Transition() {
while (!ScreenFlip() && !ProcessMessage() && !ClearDrawScreen()) {
Keyboard::Instance()->Update();
Draw();
switch (NowStateNum) {
case 0:
screen[0]->Transition();
if(screen[0]->GetActiveFlag()==false)NowStateNum++;
break;
case 1:
screen[1]->Transition();
if (screen[1]->GetActiveFlag() == false)NowStateNum++;
break;
default:
//DrawFormatString(320, 150, Color, "%d", NowStateNum);
load->Draw();
break;
}
//if (Keyboard::Instance()->GetPressingCount(KEY_INPUT_RETURN) == 1)NowStateNum++;
if (Keyboard::Instance()->GetPressingCount(KEY_INPUT_ESCAPE) != 0)break;
}
}
StateTransition::~StateTransition(){
}
#pragma once
#define WORD_COUNTS 3000//記憶可能な単語種数
#define WORD_CHARACTERS 16//記憶可能な文字数(単語)
#define SENTENCE_CHARACTERS 64//記憶可能な文字数(文章)
class Load{
private:
int FileHandle;
int Case;
int Now;
int Input[128];
char InputBuf[128];
char WordJa[3][WORD_COUNTS][WORD_CHARACTERS];
char WordEn[WORD_COUNTS][WORD_CHARACTERS];
char sentenceQ[WORD_COUNTS][SENTENCE_CHARACTERS];
char sentenceA[WORD_COUNTS][SENTENCE_CHARACTERS];
char Answer[WORD_COUNTS][5][WORD_CHARACTERS];
public:
Load();
~Load();
void LoadData();
void Draw();
};
#include "Load.h"
#include "DxLib.h"
#include "Common.h"
Load::Load(){
Case = 0;
Now = 0;
FileHandle= FileRead_open("Load/Data.txt");
}
void Load::LoadData(){
while (FileRead_getc(FileHandle) != '\n');
int i = 0, j = 0, count = 0, AnsNum = 0;
while (Input[i] != EOF) {
for (i = 0;i < 128;i++) {
InputBuf[i] = Input[i] = FileRead_getc(FileHandle);
if (Input[i] == '/' || Input[i] == '\n') {
InputBuf[i] = '\0';
break;
}
}
switch (Case) {
case 0:strcpy_s(WordEn[Now], InputBuf);
break;
case 1:strcpy_s(WordJa[0][Now], InputBuf);
break;
case 2:strcpy_s(WordJa[1][Now], InputBuf);
break;
case 3:strcpy_s(WordJa[2][Now], InputBuf);
break;
case 4:strcpy_s(sentenceA[Now], InputBuf);
while (sentenceA[Now][j] != '\0') {
if (sentenceA[Now][j] == '[') {
while (sentenceA[Now][j] != ']') {
count++;
Answer[Now][AnsNum][count - 1] = sentenceA[Now][j + count];
sentenceA[Now][j + count] = ' ';
}
AnsNum++;
}
j++;
}
case 5:strcpy_s(sentenceQ[Now], InputBuf);
break;
}
Case++;
if (Case == 6) {
Case = 0;
Now++;
count = 0;
AnsNum = 0;
j = 0;
}
}
FileRead_close(FileHandle);
}
void Load::Draw(){
DrawFormatString(40, 90, Color, "WordEn[0]=%s", WordEn[0]);
DrawFormatString(40, 90, Color, "WordJa[0]=%s", WordJa[0]);
DrawFormatString(40, 90, Color, "WordJa[1]=%s", WordJa[1]);
DrawFormatString(40, 90, Color, "WordJa[2]=%s", WordJa[2]);
DrawFormatString(40, 90, Color, "WordJa[0]=%s", WordEn[0]);
DrawFormatString(40, 90, Color, "sentenceA[0]=%s", sentenceA[0]);
DrawFormatString(40, 90, Color, "sentenceQ[0]=%s", sentenceQ[0]);
}
Load::~Load(){
}
#include <DxLib.h>
#include "Common.h"
#include "Load.h"
#include "StateTransition.h"
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
SetGraphMode(WIDTH, HEIGHT, BITS);
SetMainWindowText(TITLE);
ChangeWindowMode(TRUE);
DxLib_Init();
SetDrawScreen(DX_SCREEN_BACK);
SetAlwaysRunFlag(TRUE);
ChangeFont("游明朝");
Load* load = new Load;
load->LoadData();
{
StateTransition st;
st.Transition();
}
DxLib_End();
delete load;
return 0;
}