QDataStream: Eingelesene Int in Bool konvertieren



  • Hi,

    ich habe in der Datei dat.bin die Zahlen 0 bis 19.
    Daher gibt die erste Schleife auch 0 bis 19 aus.
    Die zweite Schleife gibt nur Nullen aus.

    #include <QCoreApplication>
    #include <iostream>
    #include <QFile>
    #include <QDataStream>
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QFile *datei = new QFile("E:/C++/Qt/.../dat.bin");    //Auf Heap wegen QDataStream eingabeStream(datei);
        datei->open(QIODevice::ReadOnly);
        QDataStream eingabeStream(datei);
    
        std::cout<<"Integer:\n";    //Diese Schleife soll nur der Verständlichkeit dienen
        for (int schleife = 0; schleife < 20; schleife++)
        {
            int temp;
            eingabeStream >> temp;
            std::cout << temp << '\n';
        }   //Es werden die Zahlen 0 bis 19 ausgegeben
    
        std::cout<<"Boolean:\n";
        for (int schleife = 0; schleife < 20; schleife++)
        {
            int temp;
            eingabeStream >> temp;
            bool boo = temp;
            std::cout << boo << '\n';
        }   //Alle Zahlen sind Null obwohl es nur die erste sein sollte
    
        datei->close();
    
        return a.exec();
    }
    

    Das ist deshalb nicht logisch weil bei diesem Programm:

    #include <iostream>
    
    int main()
    {
        std::cout<<"Boolean:\n";
        for (int schleife = 0; schleife < 20; schleife++)
        {
            bool boo = schleife;
            std::cout << boo << '\n';
        } //Nur die erste Zahl ist eine Null
    
        return 0;
    }
    

    nur als erste Zahl Null ausgegeben wird.
    Alle anderen Zahlen sind 1.
    Das würde ich auch so bei dem ersten Programm erwarten.

    Was ist hier passiert?



  • Die Datei ist am Ende.
    Du hast mit der ersten Schleife alle Daten gelesen.

    Entweder benutzt du ein rewind oder ähnliches oder du schließt die Datei nach der ersten Schleif und öffnest sie wieder vor der zweiten.



  • Vielen Dank!
    🙂 🙂 🙂
    👍 👍 👍


Anmelden zum Antworten