Einlesen einer Datei



  • Ich habe eine Frage zum einlesen von Dateien. Ich habe ein Programm gteschrieben welches eine Datei einliest. Das funktioniert bis jetzt auch. Sogra das Ergebniss ist richtig. Doch ich habe das Problem das wenn ich die Funktion zum überprüfen der Länge ein zweites mal aufruf, völliger quatsch zurück gegeben wird. Ich vermute das es daran liegt das der Zeiger nicht zurück auf den Anfang der Datei gesetzt wird, doch das habe ich am Anfang der Funktion gemacht. Wäre super wenn mal jemand gucken könnte

    #include <iostream>
    #include <fstream>
    #include <cmath>
    using namespace std;
    
    struct Vector { double row[4]; };
    struct Matrix { Vector col[4]; };
    typedef double Determ;  
    
    Determ sarrus(Matrix indata, int a, int b, int c)
    {
      Determ det=0;
      det=      indata.col[a].row[a]*indata.col[b].row[b]*indata.col[c].row[c];
      det=det + indata.col[a].row[b]*indata.col[b].row[c]*indata.col[c].row[a];
      det=det + indata.col[a].row[c]*indata.col[b].row[a]*indata.col[c].row[b];
      det=det - indata.col[a].row[c]*indata.col[b].row[b]*indata.col[c].row[a];
      det=det - indata.col[a].row[a]*indata.col[b].row[c]*indata.col[c].row[b];
      det=det - indata.col[a].row[b]*indata.col[b].row[a]*indata.col[c].row[c];
      return det;
    
    }
    
    int matrixsize()
    {
    char Zeichenkette[20];	
    ifstream in;
    in.open("datei.txt");
    in.seekg(0, ios::beg);
    int j=0;
    if(in)
    {	
       while(!in.eof())
       {    
            j=0;
    	in.getline(Zeichenkette,160);
    	for(int i=0; Zeichenkette[i] != '\n'; ++i)
    	{
    	   if(Zeichenkette[i] == ' ')
    	   {
    	     ++j;
    	   }
    	}
    
       }
    }
    j--;
    in.close();
    return j;
    }
    
    Matrix lies()
    {
    /***********************************************
    Funktion zum einlesen der Matrix
    **********************************************/
    ifstream in;
    in.open("datei.txt");
    in.seekg(0, ios::beg);
    Matrix indata;
    int size=matrixsize();
    
    for(int i=0; i < size; ++i)
    {
       for(int j=0; j < size; ++j)
       {
       in >> indata.col[i].row[j]; 
      cout<< indata.col[i].row[j]; 
       }
       cout<< endl;
    }  
    return indata;
    }
    
    int main()
    {
      int laenge;
      Matrix input;
      Determ det;
    
      input=lies();
      laenge=matrixsize();
      int a=0, b=1, c=2;
      det=sarrus(input, a, b, c);
    
      cout<<det<< endl;
    }
    


  • char Zeichenkette[20];    
    in.getline(Zeichenkette,160);
    

    😕

    Tip: Schau mal in die FAQ: Dateien und Ströhme.

    getline und std::string ist Dein Freund



  • Wenn ich da string nehme bekomme ich folgenden Fehler, woran kann das liegen?
    Header für string habe ich eingebunden.

    matrix3.cc: In function int matrixsize()': matrix3.cc:47: error: no matching function for call to
    std::basic_ifstream<char, std::char_traits<char> >::getline(std::string&,
    int)'
    /usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.2/include/g++-v3/bits/istream.tcc:594: error: candidates
    are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
    _Traits>::getline(_CharT*, int, _CharT) [with _CharT = char, _Traits =
    std::char_traits<char>]
    /usr/lib/gcc-lib/i386-pc-linux-gnu/3.3.2/include/g++-v3/istream:401: error:
    std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT,
    _Traits>::getline(_CharT*, int) [with _CharT = char, _Traits =
    std::char_traits<char>]


Anmelden zum Antworten