Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Aus Datei lesen

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 <
000
25.01.2020, 19:42 Uhr
Mxxrcel



Moin, ich habe bei meinem Programm ein kleines Problem.
Es handelt sich nur um ein kleines Programm mit einer do while Schleife bei welcher man verschiedene Auswahlmöglichkeiten hat: zufällige Zahlen generieren, Mittelwert berechnen, Min/Max rausfinden, die zuletzt generierten Zahlen in eine Datei schreiben, Die Zahlen aus der Datei einlesen.
Nun geht es aber nicht, dass wenn ich als aller erstes zahlen aus der Datei einlesen möchte. Insgesamt sind es immer 10 zahlen in der Datei, die erste ist auch richtig aber alle anderen sind -858993460. Wenn ich aber als erstes beim Programmstart neue Zahlen generiere und dann beim zweiten Durchlauf die Zahlen aus der Datei einlese geht es wunderbar und die Zahlen sind auch die, die wirklich in der Datei stehen und nicht die, die im Durchlauf vorher generiert wurden.
Woran liegt das?

Auf Wunsch kann ich gerne den Code zeigen.

Lg, Marcel
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
26.01.2020, 13:47 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

ja zeig gerne den Code, ohne kann man das schlecht beurteilen.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
26.01.2020, 15:15 Uhr
Mxxrcel




Zitat von FloSoft:
Hi,

ja zeig gerne den Code, ohne kann man das schlecht beurteilen.



Es handelt sich um den Teil:

C++:
else if (auswahl == 'l')
        {
            ifstream read;
            char zahl_datei;
            string test12;
            int i = 0;
            stringstream sss;

            cout << endl << "Dies sind die Daten aus der Datei 'projekto_zufallszahlen.txt':" << endl << endl;
            
            read.open("projekto_zufallszahlen.txt", ios::in);

            while (getline(read, test12))
            {
                sss << test12;
                sss >> Zufallzahlen[i];
                cout << "Zahl " << i+1 << ":  " << Zufallzahlen[i] << endl;
                i = i + 1;
            }
            
            read.close();

            
        }



Hier aber nochmal der gesamte Code:


C++:
#include <iostream>
#include <ctime>
#include <fstream>
#include <string>
#include <Windows.h>
#include <sstream>

using namespace std;


int main()
{
    const int max = 10;
    int Zufallzahlen[max];
    char auswahl;
    int zufall, mini, maxi, gesamt;
    double mittel;
    
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
    srand((unsigned)time(0));
  
    do
    {

        cout << "Was wollen sie tun?" << endl
            << "Zufallszahlen ziehen (z)" << endl
            << "Mittelwert berechnen (m)" << endl
            << "Minimum und Maximum anzeigen (u)" << endl
            << "In eine Datei schreiben (s)" << endl
            << "Aus einer Datei lesen (l)" << endl
            << "beenden (b)" << endl << endl;
        cout << "Eingabe: " ;
        cin >> auswahl;


        if (auswahl == 'z')
        {
            cout << endl << "Zufallszahlen werden generiert..." << endl;

            for (int i = 0; i < max; i++)
            {
                zufall = (rand() % 1000) + 1;
                Zufallzahlen[i] = zufall;
                cout << "Zahl " << i + 1 << "\t";
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9);
                cout << Zufallzahlen[i] << endl;
                SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12);
            }

            cout << endl;
        }
        else if (auswahl == 'm')
        {
            cout << endl << "Mittelwert wird berechnet..." << endl << endl;
            gesamt = 0;
            for (int i = 0; i < max; i++)
            {
                gesamt = gesamt + Zufallzahlen[i];
            }
            mittel = gesamt / max;
            cout << "Der Mittelwert ist: " << mittel << endl << endl;
        }
        else if (auswahl == 'u')
        {
            cout << endl << "Minimum und Maximum werden analysiert..." << endl << endl;
            mini = Zufallzahlen[1];
            maxi = Zufallzahlen[1];
            for (int i = 0; i < max; i++)
            {
                if (mini > Zufallzahlen[i])
                {
                    mini = Zufallzahlen[i];
                }
                else if (maxi < Zufallzahlen[i])
                {
                    maxi = Zufallzahlen[i];
                }
            }
            cout << "Das Minimum ist: " << mini << endl;
            cout << "Das Maximum ist: " << maxi << endl;
        }
        else if (auswahl == 's')
        {
            ofstream write;

            write.open("projekto_zufallszahlen.txt", ios::out);

            for (int i = 0; i < max; i++)
            {
                write << Zufallzahlen[i] << endl;
            }

            write.close();

            cout << endl << "Die Zahlen wurden in die Datei 'projekto_zufallszahlen.txt' geschrieben." << endl << endl;
        }
        else if (auswahl == 'l')
        {
            ifstream read;
            char zahl_datei;
            string test12;
            int i = 0;
            stringstream sss;

            cout << endl << "Dies sind die Daten aus der Datei 'projekto_zufallszahlen.txt':" << endl << endl;
            
            read.open("projekto_zufallszahlen.txt", ios::in);

            while (getline(read, test12))
            {
                sss << test12;
                sss >> Zufallzahlen[i];
                cout << "Zahl " << i+1 << ":  " << Zufallzahlen[i] << endl;
                i = i + 1;
            }
            
            read.close();

            
        }
        else if (auswahl == 'b')
        {
            return 0;
        }
        else
        {
            cout << "Falsche Eingabe!" << endl << endl;
        }

        cout << "________________________________________________________" << endl << endl;

    } while (auswahl != 'b');

    


}



Dieser Post wurde am 26.01.2020 um 15:16 Uhr von Mxxrcel editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
29.01.2020, 21:05 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

dein Problem kommt daher, das du im C Stil Variablen wiederverwendest. Das macht man in C++ (inzwischen) nicht (mehr).


C++:
while (getline(read, test12))
{
    sss << test12;
    sss >> Zufallzahlen[i];
    cout << "Zahl " << i+1 << ":  " << Zufallzahlen[i] << endl;
    i = i + 1;
}



hier benutzt du "sss" wieder ohne es vorher sauber zu "clearen".

Definiere die Variablen einfach an der Stelle, an der sie benutzt werden, sowie "RAII" wo möglich.


C++:
ifstream read("projekto_zufallszahlen.txt");
string test12;
while (getline(read, test12))
{
    std::stringstream sss(test12);
    sss >> Zufallzahlen[i];
    cout << "Zahl " << i+1 << ":  " << Zufallzahlen[i] << endl;
    ++i;
}



Auch benutze Funktionen. z.B. Jede deiner Auswahlen in eine Funktion (Single-Responsibility-Prinzip). Das macht das ganze lesbar, testbar und idealerweise sogar wiederverwendbar.
Allgemein solltest du dich mit dem Stichwort "SOLID" und Modernem C++ auseinandersetzen ( https://alanbarber.com/post/solid-principles-five-principles-of-objectoriented-programming-and-design/ )
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: