Ik heb debuggen geprobeerd, maar krijg geen errors. Dit heb ik met de optie --debug gedaan. Segmentatiefout is bij het uitvoeren en niet bij het compilen. Als ik *lang_vraag door *lang_answer vervang werkt hij wel en de volgende regel weglaat.
cout << *lang_answer << ": ";
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
#include <random>
#define WORD_SIZE 256
using namespace std;
// eigenschappen van het vertalen van een woord.
class lang2lang
{
public:
string language1;
string language2;
};
//lijn opdelen in 2 woorden die hetzelfde betekenen.
lang2lang split(string line)
{
int l = line.length();
lang2lang a;
size_t pos = line.find("\t");
a.language1 = line.substr(0,pos);
if (pos < l - 2)
{
pos++;
a.language2 = line.substr(pos);
}
return a;
}
//Het antwoord vergelijken met to
bool vraag(string *to,string* answer)
{
bool r = false;
if (*answer == *to)
{
r = true;
}
return r;
}
//input van regels.
void trans(istream* input)
{
string lang1;
string lang2;
string* lang_vraag;
string* lang_answer;
string answer = "";
lang2lang words[WORD_SIZE];
string lineInput;
int n,p,r,richting = 0;
int n_vragen;
bool ans;
string *from;
string *to;
while (getline(*input,lineInput) && n < WORD_SIZE)
{
if (!lineInput.empty())
{
if (lineInput[0]== '#')
{
int l = lineInput.length();
size_t pos = lineInput.find("\t");
lang1 = lineInput.substr(1,pos - 1);
if (pos < l - 2)
{
pos++;
lang2 = lineInput.substr(pos);
}
}
else
{
words[n] = split(lineInput);
n++;
}
}
}
n_vragen = 3 * n;
for (int i = 0; i < n_vragen;i++)
{
p=0;
r = rand() % n;
richting = rand() % 2;
ans = false;
if (richting == 0)
{
from = &words[r].language1;
to = &words[r].language2;
lang_vraag = &lang1;
lang_answer = &lang2;
}
else if (richting == 1)
{
from = &words[r].language2;
to = &words[r].language1;
lang_vraag = &lang2;
lang_answer = &lang1;
}
while (ans == false && p < 3)
{
cout << *lang_vraag << ": " << *from << '?' << endl;
//error bij het weergeven van
//lang_answer is juist.
cout << *lang_answer << ": ";
getline(cin, answer);
ans = vraag(to, &answer);
if (ans == false)
{
cout << "\tFalse" << endl;
}
else
{
cout << "\tTrue" << endl;
}
p++;
}
}
}
//starten vanaf het aangegeven bestand op de commandline
int main(int argc, char* argv[])
{
char f_std[] = "words";
char* file = NULL;
if (argc == 2)
{
file = argv[1];
}
if (file == NULL)
{
file = f_std;
}
//betand inlezen.
ifstream fin (file);
trans(&fin);
}