In Datei schreiben: Brauche Hilfe :/ - Lottozahlen auswerten



  • Guten Morgen zusammen,
    bin recht neu und versuche mich momentan ein wenig in C++ einzuarbeiten ( Bin Blutiger Anfänger, möchte es aber gerne lernen 🙂 ).
    Leider habe ich nichts passendes im Forum gefunden, also versuche ich es mal auf diesem Weg :). Ich hoffe jemand könnte mir meine Fragen beantworten.

    Ich versuche ausgelesene Variablen zu vergleichen und anschließend etwas in ein Dokument zu schreiben. Die Idee ist wie folgt:
    Es sollen spalten im Textdokument ausgelesen und beschrieben werden. Wenn die Zahl eingegeben wird, soll verglichen werden ob diese mit einem Wert übereinstimmt. Ist dies der Fall, soll in eine Spalte die ausgelesene Zahl im 1 erhöht werden. Anschließend soll in die nächste Spalte gesprungen werden und erneut vergleichen werden. Das ganze 50 mal. Wenn die Schleife durch ist soll das ganze erneut starten allerdings wieder ganz oben im Text Dokument.

    Kurzform: Die Aufgabe ist: Lottozahlen einzugeben und auswerten lassen welche Zahlen am häufigsten vorkommen.

    Nur leider funktioniert das beschreiben nicht so wie es soll.
    Ich bitte um Entschuldigung, falls das Programm unübersichtlich erscheint. Bin wie gesagt Absoluter Anfänger.

    Textdokument sieht wie folgt aus:
    0 // Zahl 1
    0 // Zahl 2
    0 // Zahl 3 und so weiter
    .....
    0 // Zahl 49

    ##############################################################################
    #include <fstream>
    #include <iostream>
    #include <iomanip>
    #include <sstream>
    #include <bitset>
    #include <string>

    using namespace std;

    int main()
    {
    cout << "Programmstart\n";
    cout << "Eingabe der heutigen Lotto Zahlen\n";

    ifstream auslesen;

    string zahlenwert[100];
    int richtigezahl = 0;
    int ergebnis = 0, g=0;
    int zwischenwert = 0;
    int lottozahl[100], eingabe = 0, eingabewert = 0, binzahl[100], y = 1, a = 0, b = 0, c = 0, x = 1, k=1;
    lottozahl[k] = 1;

    auslesen.open("Lotto.txt", ios_base::in);
    auslesen.seekg(0, ios::beg);

    while (!auslesen.eof())
    {
    std::getline(auslesen, zahlenwert[x],'\n');
    std::stringstream sstr(zahlenwert[x]);
    sstr >> binzahl[x];
    x++;
    }

    x = 1;

    for (b = 0; b <49; b++)
    {


    x++;
    lottozahl[k]++;

    x = 1, lottozahl[k]=1;

    ofstream schreiben;

    schreiben.open("Lotto.txt", ios_base::in);
    do
    {
    cout << "\nEingabe der Zahl: ";
    cin >> richtigezahl;

    for (g = 0; g < 49; g++)
    {

    if (richtigezahl == lottozahl[k])
    {


    }
    else
    {

    }

    x++;
    lottozahl[k]++;
    schreiben.put('\n');
    }

    } while (richtigezahl <= 999);
    auslesen.close();
    schreiben.close();

    system("PAUSE");
    return 0;
    }###############################################################################



  • "funktioniert nicht wie es soll" - sehr aussagekräftige Beschreibung.

    Benutze Codetags.

    Warum die Zahlen nicht direkt als Zahl eingelesen werden erschließt sich mir nicht.

    Warum x=1?

    Warum der Test auf eof falsch ist wurde in diesem Forum tausende male besprochen.



  • #include <fstream> 
    #include <iostream> 
    #include <iomanip> 
    #include <sstream> 
    #include <bitset> 
    #include <string> 
    
    using namespace std; 
    
    int main() 
    { 
    cout << "Programmstart\n"; 
    cout << "Eingabe der heutigen Lotto Zahlen\n"; 
    
    ifstream auslesen; 
    
    string zahlenwert[100]; 
    int richtigezahl = 0; 
    int ergebnis = 0, g=0; 
    int zwischenwert = 0; 
    int lottozahl[100], eingabe = 0, eingabewert = 0, binzahl[100], y = 1, a = 0, b = 0, c = 0, x = 1, k=1; 
    lottozahl[k] = 1; 
    
    auslesen.open("Lotto.txt", ios_base::in); 
    auslesen.seekg(0, ios::beg); 
    
    while (!auslesen.eof()) 
    { 
    std::getline(auslesen, zahlenwert[x],'\n'); 
    std::stringstream sstr(zahlenwert[x]); 
    sstr >> binzahl[x]; 
    x++; 
    } 
    
    x = 1; 
    
    for (b = 0; b <49; b++) 
    { 
    cout << "Lottozahl " << lottozahl[k] << " ist vorgekommen: " << zahlenwert[x] << endl; 
    x++; 
    lottozahl[k]++; 
    
    x = 1, lottozahl[k]=1; 
    
    ofstream schreiben; 
    
    schreiben.open("Lotto.txt", ios_base::in); 
    do 
    { 
    cout << "\nEingabe der Zahl: "; 
    cin >> richtigezahl; 
    
    for (g = 0; g < 49; g++) 
    { 
    
    if (richtigezahl == lottozahl[k]) 
    { 
    ergebnis = binzahl[x] + 1,schreiben << ergebnis; 
    } 
    else 
    { 
    ergebnis = binzahl[x] + 0,schreiben << ergebnis; 
    } 
    
    x++; 
    lottozahl[k]++; 
    schreiben.put('\n'); 
    } 
    
    } while (richtigezahl <= 999); 
    auslesen.close(); 
    schreiben.close(); 
    
    system("PAUSE"); 
    return 0; 
    }
    


  • Also wenn ich dich richtig verstehe, sollen Zahlen eingelesen werden und deren Anzahl gezählt werden. Für sowas bietet sich immer ne map an. Ein naiver Ansatz wäre wohl etwas wie

    #include <fstream> 
    #include <iostream>
    #include <map>
    
    int main() 
    { 
    	using namespace std; 
    	map<int, int> haeufigkeiten;
    	for(int i = 1; i <= 49; ++i)
    		haeufigkeiten[i] = 0;
    	cout << "Programmstart\n"; 
    	cout << "Eingabe der heutigen Lotto Zahlen (mit Buchstabe beenden)\n"; 
    	int zahl;
    	while(cin >> zahl)
    		++haeufigkeiten[zahl];
    	ofstream lottozahlen("Lotto.txt");
    	for(auto i : haeufigkeiten)
    		lottozahlen << i.first << " " << i.second << " mal\n";
    }
    

    Ohne jetzt zu gucken, ob wirklich Zahlen zwischen 1 und 49 eingegeben wurden.



  • y = 1, a = 0, b = 0, c = 0, x = 1, k=1 und auch noch g - sehr aussagekräftig.
    Gewöhne dir als Erstes mal einigermaßen sprechende Variablen an.


Log in to reply