vokabeltest



  • habe die fehlermeldung das insert ne klasse oder struktur sein muss. wie binde ich eine klasse damit ein usw. ist die hauptklasse nicht vokabeln? muss ich ein unterprogramm erstellen? muss die vokabelabfrage dann im hauptprogramm stehen? AHHHHHHHHHH!!!



  • ich glaube auslesen wäre am besten. der stoff ist in einer editor datei geschrieben, ungefährt so

    Unit1 A
    dog hund
    mother Mutter
    father Vater
    Unit1 B
    woman Frau
    man Mann
    Unit2 A
    ...
    ..
    .

    wie lese ich die datei aus, das z.B. das deutsche wort erscheint und ich das englische hinschreiben muss und das programm diese vergleicht, alle einzeln ins programm einzippen wäre viel zu zeitaufwändig. trotzdem vielen vielen vielen dank 🙂



  • 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 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