vokabeltest
-
hi, ich würde die vokabeln in der datei mit einem bestimmten zeichen trennen,
da manche vokabeln ein leerzeichen enthalten.
ich benutze mal | . Dann sollte das so gehn :fstream datei; datei.open("datei.txt", ios::in); while(!datei.eof()) { getline(datei, line); i = 0; while(line[i] != '|') { str += line[i]; i++; } i++; while(i<=line.length()) { str2 += line[i]; i++; } vokabeln.insert(make_pair(str,str2)); }
-
Man kann die Strings auch aneinanderreihen und das Array dann 1:1 auf die Platte kopieren.
/* Alle Wörter */ char *g_pcStringPool; int g_iStringPoolSize; /* Hash zum schnellen Finden */ struct thashentry { int istrpooloff; int ivokabelidx; }; struct thash { int iecnt; struct thashentry *pe; }; struct thash g_HashEnglish[1000]; struct thash g_HashDeutsch[1000]; /* das eigentliche Vokabelarray */ struct tVokabel { int ienglishcount; /* engl. Anzahl der Synonyme */ int *pienglish; /* StringPoolOffsets */ int ideutschcount; /* dt. Anzahl der Synonyme */ int *pideutsch; /* StringPoolOffsets */ }; struct tVokabel *g_pVokabel; int g_iVokabelCount; int Load(char *file) { FILE *fp; int i; if ((fp = fopen(file, "rb")) == 0) return 0; g_iStringPoolSize = getw(fp); g_pcStringPool = malloc(g_iStringPoolSize); fread(g_pcStringPool, 1, g_iStringPoolSize, fp); g_iVokabelCount = getw(fp); g_pVokabel = malloc(g_iVokabelCount*sizeof(struct tVokabel)); for (i = 0; i < g_iVokabelCount; i++) { /* engl. "hobby" */ g_pVokabel[i].ienglishcount = getw(fp); g_pVokabel[i].pienglish = malloc(g_pVokabel[i].ienglishcount*sizeof(int)); fread(g_pVokabel[i].pienglish, sizeof(int), g_pVokabel[i].ienglishcount, fp); /* dt. "Hobby", "Steckenpferd" */ g_pVokabel[i].ideutschcount = getw(fp); g_pVokabel[i].pideutsch = malloc(g_pVokabel[i].ideutschcount*sizeof(int)); fread(g_pVokabel[i].pideutsch, sizeof(int), g_pVokabel[i].ideutschcount, fp); } fclose(fp); InitHashEnglishDeutsch(); return 1; }
-
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
danke backfisch und keksekekse, aber ich weiß nicht wie ich die strukturen bei dir einbinden soll backfisch, und bei dir kekse kekse bekommen ich folgende fehlermeldungen:
E:\dfdfdfd\dfdfdfd.cpp(37) : error C2065: 'FILE' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(37) : error C2065: 'fp' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(37) : warning C4552: '*' : Operator hat keine Auswirkungen; Operator mit Seiteneffekt erwartet
E:\dfdfdfd\dfdfdfd.cpp(40) : error C2065: 'fopen' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(43) : error C2065: 'getw' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(44) : error C2065: 'malloc' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(44) : error C2440: '=' : 'int' kann nicht in 'char *' konvertiert werden
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
E:\dfdfdfd\dfdfdfd.cpp(45) : error C2065: 'fread' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(48) : error C2440: '=' : 'int' kann nicht in 'struct tVokabel *' konvertiert werden
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
E:\dfdfdfd\dfdfdfd.cpp(52) : error C2440: '=' : 'int' kann nicht in 'int *' konvertiert werden
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
E:\dfdfdfd\dfdfdfd.cpp(57) : error C2440: '=' : 'int' kann nicht in 'int *' konvertiert werden
Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat
E:\dfdfdfd\dfdfdfd.cpp(60) : error C2065: 'fclose' : nichtdeklarierter Bezeichner
E:\dfdfdfd\dfdfdfd.cpp(62) : error C2065: 'InitHashEnglishDeutsch' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.dfdfdfd.exe - 12 Fehler, 1 Warnung(en)
-
muss ich evtl. mehrer bibliotheken einbinden? wenn ja, welche (header wären auch schön.
#include "stdafx.h"
#include "iostream.h"
#include "string.h"die hab ich benutzt
-
oder könntet ihr einen kompletten quellcode, mit headern usw. auflisten????????????
-
#include "stdafx.h" #include <iostream> #include <string>muss es wenn heißen ...
-
Ich arbeite im Moment auch an einem Vokabeltrainer, hier mein Code bisher:
#include <cstdlib> #include <iostream> #include <fstream> #include <string> #include <conio.h> #include <map> #include <ic.hpp> #include <windows.h> using namespace std; using namespace ic::shorties; char buffer; string str, str2, line; int i; map<string,string> vokabeln; void menu(); void initialize(); void vokabeltest(); void add(); void wait(); int main() { initialize(); menu(); } void initialize() { fstream datei; datei.open("datei.txt", ios::in); while(!datei.eof()) { cout<<"Initialisieren......"; getline(datei, line); i = 0; while(line[i] != '|') { str += line[i]; i++; } i++; while(i!=line.length()) { str2 += line[i]; i++; } vokabeln.insert(make_pair(str,str2)); clrscr(); gotoxy(0,0); } } void menu() { clrscr(); gotoxy(0,0); cout<<"Vokabeln hinzufuegen : 1\n"; cout<<"Vokabeltest : 2\n"; int antwort; cin>>antwort; switch(antwort) { case 1: add(); break; case 2: vokabeltest(); break; default: menu(); break; } } void add() { //kommt noch } void vokabeltest() { map<string,string>::iterator pos; pos = vokabeln.begin(); cout<<"Wie lautet die Uebersetzung von \""<<pos->first<<"\"?"<<endl; string answer; cin>>answer; if(answer==pos->second) { cout<<"Richtig!\n"; wait(); } else{ cout<<"Falsch!\n"; cout<<"Richtg waere "<<pos->second<<" gewesen."; wait(); } } void wait () { FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)); getch(); }Meine datei.txt sieht wie folgt aus:
englisch|deutsch englisch2|deutsch2 ...Aber irgendwie sagt es mir immer, dass meine Eingabe falsch waere. kA was da falsch ist.
-
Ich hab mal das versucht:
... string answer; answer == pos->second; if(answer==pos->second) { cout<<"Richtig!\n"; wait(); } else{ cout<<"Falsch!\n"; cout<<"Richtg waere "<<pos->second<<" gewesen."; wait(); } ...Warum zur Hölle spuckt das immer wieder Falsch! aus?
-
e:\gggggg\gggggg.cpp(108) : fatal error C1010: Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei
Fehler beim Ausführen von cl.exe.gggggg.exe - 1 Fehler, 0 Warnung(en)
der fehler bezieht sich auf die letzte zeile. woran liegts???
-
wtf?
-
Hm eine Frage:
Wozu die Map wenn der Zugriff über den String als Schlüssel nicht verwendet wird?
-
@Whtthfck: Schau dir das Programm mal im Debugger an - womöglich hast du ja beim Einlesen gepatzt.
(btw, die Anweisunganswer==pos->secondist nutzlos)@Zwielicht: Lies dir mal in der MSDN das Kapitel "vorcompilierte Header" durch

-
omg ich depp hab vergessen str und str2 zurückzusetzen

thx CStoll ^^