Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

22.09.2004, 18:47

Noob Frage: Vokabel Trainer hat Probleme

Hi,
ich bin seit kurzer Zeit daran, einen Vokabel Trainer auf DosBasis zu programmmieren (einfach, damit ich mich erstmal nicht um die gaaanze Fensterinitialisierung kümmern muss ;) ). Soweit, so gut.
Ablaufen soll das ganze so:
-1. Man sucht sich eine bestimmte Lektion aus
-2. Eine Vokabel wird aus einer Ini Datei (=DB) rausgesucht und abgefragt; dabei gibt es 2 deutsche Möglichkeiten
-3. Der Benutzer gibt die Vokabel ein
-4. Es wird geprüft, ob die Vokabel mit der ersten oder zweiten Übersetzung übereinstimmt
-5.Entweder wird die nächste Vokabel gefragt, oder die Statistik wird aktualisiert und man kommt zurück zum Hauptmenü

Größtenteils klappt das auch, nur nachdem man eine gewisse Zeit lang die Vokabeln richtig beantwortet hat, fragt das Programm einen gar nichts ab. D.h die Frage kommt, aber da, wo die Vakabel stehen sollte, ist ein leerzeichen ???

Hier ist mal der Teil, in dem die Vokabeln ausgelesen werden:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//Szene inti.

void initScene()
{
    //wie viele Datensätze gibt es in der DB

    g_isVokabeln >> g_iAnzahl;
    srand( (unsigned)time( NULL ) );
    //Zufallszahl

    random();
    //Fragen

    frage();
}

//Deutsch Latein Vars

string g_sLatein[9999];
string g_sDeutsch[9999];
string g_sDeutsch2[9999];

//random Funtkion, zieht zufallszahl

void random()
{

    int loop = 0;
    //Zufallszahl zwischen 1 und 1 + Gesamtzahl

    g_iDatensatz = rand() % g_iAnzahl;


    //For Schleife

    for (iDaten = 0; iDaten < g_iAnzahl; iDaten++)
    {
        g_isVokabeln >> g_sLatein[iDaten] >> g_sDeutsch[iDaten] >> g_sDeutsch2[iDaten];
    }
        cout << g_iDatensatz << endl;
}

Ich glaub , dass ich irgendwas mit den Arrays falsch gemacht hab....

Wer sich mal die ganze Datei angucken möchte hier klicken (Ziel speichern unter)

Wäre echt super, wenn ihr mir helfen könntet,

Mfg Serubabbel
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

22.09.2004, 18:54

benutzt du für die eingabe std::cin bzw. std::wcin?

3

22.09.2004, 19:06

Zitat

benutzt du für die eingabe std::cin bzw. std::wcin?


Ja, mach ich....
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

4

22.09.2004, 19:40

Hi,

dann musst du den Eingabepuffer leeren (war glaub ich std::cin.ignore() und std::cin.sync() oder so ca.)

Falls du ganze Sätze (mit Leerzeichen) eingeben willst geht das nur so:

C-/C++-Quelltext

1
2
3
wchar_t *buffer;

std::wcin.getline (buffer, 256);


oder so ca. :) benutz ich sehr selten :)

5

22.09.2004, 20:14

Ah, da hast du mich glaub ich falsch verstanden. Dein Beitrag war zwar auch hilfreich (die Funktion kannt ich noch nicht) aber ich meinte was anderes (hab ich komisch erklärt).
Also ich lass ihn im Programm ja was abfragen, z.B.:

C-/C++-Quelltext

1
cout << "Was heißt " << Vokabel << " auf Deutsch?" << endl;


Nur manchmal fragt er dann nicht nach einer Vokabel, sondern gibt folgendes aus: "Was heißt auf Deutsch?" er zeigt einfach keine Vokabeln an

Mfg Serubabbel
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

22.09.2004, 20:21

Hi,

hab mir mal den Code runtergeladen und schau ihn mir mal an :)

- Patrick

edit: oh gott... ;D Ich glaub ich muss da selbst mal was rauskramen ;D mom gib mir bis 22:00 spätestens Zeit ;D Ich muss mich erstmal durch diesen code wühlen ;D

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

7

22.09.2004, 21:01

Hi,

hab mal auf die schnelle selbst etwas zusammen gewerkelt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <string>
#include <vector>
#include <ctime>

namespace dictionary
{
    class database
    {
    public:
        database    (void) {};
        ~database   (void) {};

            // Ein Wort + Vokabel einfügen

        void    add (const std::string &normal, const std::string &translated)
        {
            m_words_normal.push_back        (normal);
            m_words_translated.push_back    (translated);
        }

            // Größe dieser "Datenbank" wiedergeben

        int getSize (void)
        { return (m_words_normal.size()); }

            // Testet den User 

        bool test_user (void)
        {
                // Zufallsvokabel suchen

            int id = rand()%m_words_normal.size();

                // Abfragen

            std::cout << "Was bedeutet '" << m_words_normal[id].c_str() 
                      << "' uebersetzt?" << std::endl;

                // Eingabe nehmen

            char buffer[128] = "";
            std::cin.getline (buffer, 128);

                // Eingabe vergleichen 

            if (!(m_words_translated[id] == buffer))
            {
                    // Eingabe war Falsch!

                std::cout << "Falsch!!" << std::endl;
                std::cout << "Die richtige Uebersetzung von '"
                          <<  m_words_normal[id].c_str()
                          << "' ist '" 
                          << m_words_translated[id].c_str() 
                          << "'." << std::endl;

                return (false);
            }

                // Eingabe war richtig

            std::cout << "Richtig!" << std::endl;

            return (true);
        }
    
    private:
            // Wörter auf Deutsch!

        std::vector<std::string>            m_words_normal;
        std::vector<std::string>::iterator  m_words_normal_it;

            // Wörter auf die andere Sprache z.B. Latein

        std::vector<std::string>            m_words_translated;
        std::vector<std::string>::iterator  m_words_translated_it;
    };
}

int main (void)
{
        // Random initialisieren

    ::srand(time(NULL));

        // Datenbank anlegen

    dictionary::database db;

        // Wörter reinstopfen

    db.add ("ich", "ego");
    db.add ("neu", "novum");
    db.add ("sache", "rei");

        // Benutzer abfragen

    db.test_user ();

        // Gegen das direkte Schließen der Console

    std::cin.get();

    return 0;
}


also ich denk mal der macht genau das selbe wie Deiner, nur ist halt was übersichtlicher, weniger Code und funzt :)

Benutzung ist relativ einfach und Code ist hoffentlich gut kommentiert :)

Wenn Du mehrere "Lessions" machen willst, erstell einfach eine weitere Datenbank z.B. db2 und stopf da die "schwereren" Vokabeln rein.

Nachteil bei Latein und vielen anderen Sprachen ist die Mehrdeutigkeit eines Wortes die bei diesem Programm wie Deinem nicht beachtet werden!

Beispiel:
Neu - nova, novo, novus, novum usw.

Weiteres Problem ist die Groß/Kleinschreibung welche ignoriert wird, also: "Neu != nEu". Aber C++ bietet dagegen paar Funktionen an.

Ich hoff Du kannst mit dem Code etwas anfangen :)

- Patrick

8

22.09.2004, 21:20

Ahja, vielen Dank! Quellcode werd ich mogen mal durchstudieren, aber ich weiß auf jeden Fall, dass es geht!!
Ich hab jett auch das Gefühl, dass ich Latein kann, alle drei Vokabeln weiß ich!!! :) ;) :-D

Naja, nochmals Danke :huhu:

Mfg Serubabbel
"Es ist Zeit, dass die Menschheit ins Sonnensystem vordringt"
George W. Bush

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

9

22.09.2004, 21:27

nullum problema, vir auxilii libens. :) (Oder so in der Art, ist schon Jahre her ;D)

Bei Fragen einfach fragen ;) Oder ICQ :)

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

10

22.09.2004, 23:07

Achja zum Thema: Groß/Kleinschreibung hab ich was gefunden

http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=stricmp#Answ

Werbeanzeige