Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Dateiabfrage

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
11.04.2004, 12:07 Uhr
~Imp
Gast


Hi

Ich bin im moment dabei ein kleines Quiz für die Konsole zu schreiben und habe da ein Problem.
Wenn ich das Programm ausführe fragt er manchmal nur einmal oder 2mal oder auch 3mal die daten ab danach lässt der das Feld leer.

z.B. 1. F:Wie heißt die Hauptstadt von Deutschland?
A:Berlin
Weiter?
Ja
2. F:Wie heißt die Hauptstadt der Schweiz?
usw.

Und nach 2-3 fragen bekomme ich dann folgendes:
F: Wie heißt die Hauptstadt von ?



C++:
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;

int main()

{
    ifstream dat_ein;
    string dateiname = ("daten.dll");   //Datenbank

    //Datenbank öffnen

    dat_ein.open(dateiname.c_str(), ios_base::in);

    if(!dat_ein)
    {
        cout << "Datenbank konnte nicht gefunden werden!";
        cout << endl;
        return -1;
    }

    int anzahl;                         //Umfang der Datebank

    int datensatz;                      //Auswahl eines Datensatzes

    string land, stadt;                 //Land und Stadtvariable

    int loop;                           //Schleifenvariable

    int weiter;                         //Weiter Abfrage

    string antwort;                     //Antwortvariable

    weiter = 1;

    dat_ein >> anzahl;

    //Zufallszahl zwischen 1 und 9
    srand( (unsigned)time( NULL ) );
    datensatz = rand() % anzahl +1;

    while(weiter !=0)
        
    {

    //Land und Stadtfeld einlesen
    loop = 2 * datensatz;
    while(loop >=2)
    {
        dat_ein >> land >> stadt;
        loop -= 2;
    }
    

    //Anwender nach der Hauptstadt fragen
    cout << "Wie heisst die Hauptstadt von "
         << land << "?" << endl;
    cin  >> antwort;

    //Antwort auswerten
    if(antwort == stadt)
    {
        cout << "Richtig!!!" << endl;
        cout << "0 Eingeben zum beenden: ";
        cin  >> weiter;
        cout << endl;
    }
    else
    {
        cout << "Falsch!!!" << endl;
        cout << "Die Richtige Antwort ist: " << stadt
             << endl;
        cout << "0 Eingeben zum beenden: ";
        cin  >> weiter;
        cout << endl;
    }
    }

    

    //Datenbank schließen

    dat_ein.close();

    getch();

    return 0;

}




Danke im vorraus.

Und bitte endschuldigt aber ich bin noch ein ziemlicher noob.

MfG
Imp
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.04.2004, 13:31 Uhr
Oliver
S2-Pixelgeneral


Hallo,

was steht denn in der "Datenbank"?

Achja und dann würde ich die Datei nicht ".dll" nennen, weil DLLs normalerweise Programmbiblotheken sind, wo Funktion etc. definiert sind.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.04.2004, 13:36 Uhr
~Imp
Gast



Zitat:
Oliver Müller postete
Hallo,

was steht denn in der "Datenbank"?

Achja und dann würde ich die Datei nicht ".dll" nennen, weil DLLs normalerweise Programmbiblotheken sind, wo Funktion etc. definiert sind.



Code:
9
Angola Luanda
Kolumbien Bogota
USA Washington
Schweiz Bern
Schweden Stockholm
Senegal Dakar
Niederlande Amsterdam
Deutschland Berlin
Japan Tokio



Das mit der dll war auch nur so en spaß (wollte mal sehen ob das geht).
Hatte das am anfag in ner txt datei.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.04.2004, 13:58 Uhr
Oliver
S2-Pixelgeneral


Das, dann nichts rauskommt liegt warscheinlich daran, dass du denn Dateizeiger immer weiter setzt bei jeder Frage. Also wenn der Dateizeiger beispielsweise auf Japan steht und dann kommt die nächste Frage und er versucht wieder was rauszulesen, ist früher oder später am Ende der Datei angelangt und liefert dann logischerweise nichts mehr zurück. Am besten du liest alles einmal am Anfang in ein Array und machst dann Zufallszahlen und greifst auf die Fragen und Antworten dann mittels den [] zu.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.04.2004, 14:44 Uhr
~Imp
Gast



Zitat:
Oliver Müller postete
Das, dann nichts rauskommt liegt warscheinlich daran, dass du denn Dateizeiger immer weiter setzt bei jeder Frage. Also wenn der Dateizeiger beispielsweise auf Japan steht und dann kommt die nächste Frage und er versucht wieder was rauszulesen, ist früher oder später am Ende der Datei angelangt und liefert dann logischerweise nichts mehr zurück. Am besten du liest alles einmal am Anfang in ein Array und machst dann Zufallszahlen und greifst auf die Fragen und Antworten dann mittels den [] zu.



Kannst du mir dazu ein Beispiel geben damit ich das besser umsetzten kann (wie gesagt bin noch noob)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.04.2004, 17:17 Uhr
Oliver
S2-Pixelgeneral


So sollte es gehen, natürlich werden jetzt auch die Fragen doppelt gestellt, aber das kannste ja noch ändern.


C++:
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <ctime>
using namespace std;

int main()

{
    ifstream dat_ein;
    int weiter;
    // anzahl
    int anzahl;
    string dateiname = ("daten.dll");   //Datenbank
    // Array für Antworten
    string *antworten;
    // Array für Fragen
    string *fragen;
    // aktuelle frage
    int aktfrage;
    // Antwort des Benutzers
    string antwort;


    //Datenbank öffnen

    dat_ein.open(dateiname.c_str(), ios_base::in);

    if(!dat_ein)
    {
        cout << "Datenbank konnte nicht gefunden werden!";
        cout << endl;
        return -1;
    }


    // Anzahl einlesen
    dat_ein >> anzahl;

    // Speicher allokieren soviel, wie es Fragen gibt, logischerweise
    antworten = new string[anzahl];
    fragen = new string[anzahl];

    // Antworten und Fragen in die Arrays lesen
    for(int i=0;i<anzahl;++i)
    {
        dat_ein >> fragen[i];
        dat_ein >> antworten[i];
    }



    //Zufallsgenerator initialiseren
    srand( (unsigned)time( NULL ) );

    while(weiter !=0)    
    {

    // Zufällige Frage
    aktfrage=rand() % anzahl +1;

    //Anwender nach der Hauptstadt fragen
    cout << "Wie heisst die Hauptstadt von "
         << fragen[aktfrage] << "?" << endl;
    cin  >> antwort;

    //Antwort auswerten
    if(antwort==antworten[aktfrage])
    {
        cout << "Richtig!!!" << endl;
        cout << "0 Eingeben zum beenden: ";
        cin  >> weiter;
        cout << endl;
    }
    else
    {
        cout << "Falsch!!!" << endl;
        cout << "Die Richtige Antwort ist: " << antworten[aktfrage]
             << endl;
        cout << "0 Eingeben zum beenden: ";
        cin  >> weiter;
        cout << endl;
    }
    }

    

    //Datenbank schließen

    dat_ein.close();


    // !!! Speicher freigeben
    // nicht vergessen !!!

    delete [] fragen;
    delete [] antworten;

    getch();

    return 0;

}


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.04.2004, 17:39 Uhr
~Imp
Gast


Danke für die nette hilfe
Werde das gleich mal probieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
12.04.2004, 13:14 Uhr
Imp



Wie meinst du das mit kannst du noch ändern ich hab schon verschiedenes probiert aber noch keine lösung gefunden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
12.04.2004, 13:44 Uhr
Oliver
S2-Pixelgeneral


Naja du machst noch ein Array und schreibst dann immer die Indexe (heißt das so) von den gestellten Fragen da rein und wenn du eine Frage stellst, vergleichst du sie immer, ob sie schon gestellt wurde, wenn ja, machst du eine neue Zufallszahl, wenn nein kannst du die Frage ganz normal anzeigen.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
12.04.2004, 14:09 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat:
Oliver Müller postete
...die Indexe (heißt das so)...

<klugscheisser>Indizes</klugscheiser>
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: