[c++ Lesen mehrerer Variablen aus einer Textdatei



  • Hallo,

    ich möchte aus einer Datei einen Wert für die int Variable arrayheight auslesen. Danach soll damit ein zweidimensionales Array erzeugt werden. Danach soll das Array mit Werten gefüttert werden die zwei Zeilen unter arrayheight stehen.
    Die eingabedatei sieht wie folgt aus:

    arrayheight: 4
    
    Variable_nr;lower_bound;upper_bound      
    1;80;100
    2;50;55
    3;5;44
    4;45;66
    

    Der compiler spuckt einige folgender Fehlermeldungen aus:

    C:29: error: no match for 'operator>>' in 'file.std::basic_ifstream<char, std::char_traits<char> >::<anonymous>.std::basic_istream<_CharT, _Traits>::operator>> [with _CharT = char, _Traits = std::char_traits<char>](((int&)(& varNr))) >> separator'
    

    Kann es sein, dass die datentypen nicht übereinstimmen? im stream stehen ja eigentlich string oder char. Ich habe aber oGrenze, usw. als int definiert. Wenn ich sie jedoch als char definiere kommen ähnliche fehler...

    Wo liegt mein Fehler?

    Der Code:

    #include <iostream>
    #include <fstream>
    
    int main()
    {
    
        std::ifstream file("Variableninput.dat");
        if( !file.is_open() )
        {
            std::cerr << "Fehler beim Oeffnen" << std::endl;
            return -1;
        }
        file.ignore( std::numeric_limits< std::streamsize >::max(), ':' );
        size_t arrayHeigth;
        file >> arrayHeigth;
    
        std::string comment;
        file >> comment; //geht hier so einfach, da Var_nr;uGrenze;oGrenze ein Wort ist, ansonsten: file.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ) )
    
        int varNr, uGrenze, oGrenze, arrayWidth;
        const char* separator = ";";
        int varArray[arrayHeigth] [arrayWidth];
        arrayWidth = 3;
    
        for (unsigned int i = 1; i <= arrayHeigth; i++)
        {       
        file >> varNr >> separator >> uGrenze >> separator >> oGrenze >> "\n";
        varArray [i] [1] = varNr; varArray [i] [2] = uGrenze; varArray [i] [3] = oGrenze;
        std :: cout << varArray [i] [1] << "\t" << varArray [i] [2] << "\t" << varArray [i] [3]<< "\n";
        }
    }
    

    Danke für eure Hilfe.

    Guddy



  • Probiers mal so:

    const char separator = ';';
    


  • Du hast separator als const char* definiert und const kann natürlich nicht vom filestream beschrieben werden. Und wenn du nur ein Zeichen lesen willst, dann nur char.



  • ach und arrayWidth = 3; sollte gesetzt sein, vor das array erstellt wird.



  • wenn ich den pointer weglasse kommt:

    invalid conversion from 'const char*' to 'char'
    


  • ';' nicht ";"



  • Schau mal was drakon geschrieben hat 😉


Anmelden zum Antworten