vokabeltest



  • 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 Anweisung answer==pos->second ist 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 ^^


Anmelden zum Antworten