Tabelle einlesen fehlerhaft



  • Hi,

    Ich bin dabei, ein Programm zu schreiben, welches eine Tabelle zeilenweise ließt und sobald ein bestimmter Wert gefunden ist, diese Zeile auf Variablen schreibt und anschließend das lesen beendet. Das sieht bisher vereinfacht so aus:

    std::ifstream datei("Wertetabelle.txt");
    string zeile;

    while (getline(datei, zeile))
    {
    stringstream zeilenpuffer(zeile);
    double a;
    double b;

    zeilenpuffer >> a >> b;

    if (x == a)
    {
    y = b;
    break;
    }
    }

    Funktioniert auch alles, nur wenn die Tabelle nicht gefunden werden kann, möchte ich eine Meldung ausgeben, dass dies halt so ist. Kann mir jemand einen Vorschlag machen, wie das aussehen könnte? Ich bin noch ziemlicher Anfängern und habe es einfach nicht hinbekommen.

    LG Marcel



  • #include <fstream>
    
    int main()
    {
      std::ifstream tabelle("wt.txt");
    
      if( tabelle.bad() )
      {
        std::cout << "nicht gefunden" << std::endl;
        return 0;
      }
    
      double a(0.), b(0.);
      while( tabelle.good() )
      {
        tabelle >> a >> b;
        if( a == b )
        {
          std::cout << "gefunden" << std::endl;
          return 0;
        }
      };
    
      std::cout << "nicht gefunden" << std::endl;
    }
    

    bb



  • unskilled schrieb:

    #include <fstream>
    
    int main()
    {
      std::ifstream tabelle("wt.txt");
    
      if( tabelle.bad() )
      {
        std::cout << "nicht gefunden" << std::endl;
        return 0;
      }
    
      double a(0.), b(0.);
      while( tabelle.good() )
      {
        tabelle >> a >> b;
        if( a == b )
        {
          std::cout << "gefunden" << std::endl;
          return 0;
        }
      };
    
      std::cout << "nicht gefunden" << std::endl;
    }
    

    bb

    Probiere das mal mit

    wt.txt schrieb:

    xyz



  • grml...

    tabelle >> a >> b; 
        if(! tabelle )
           std::cout << "bad format";
        if( a == b )
    


  • Hallo Marcel,

    Mars schrieb:

    Funktioniert auch alles, nur wenn die Tabelle nicht gefunden werden kann, möchte ich eine Meldung ausgeben, dass dies halt so ist. Kann mir jemand einen Vorschlag machen, wie das aussehen könnte? Ich bin noch ziemlicher Anfängern und habe es einfach nicht hinbekommen.

    Das Fehler- und EOF-Flag des Streams gibt Dir die gewünschte Information:

    #include <iostream>
    #include <fstream>
    
    bool anforderung_erfuellt( double a, double b )
    {
        return a == 1 && b == 2; // oder was auch immer
    }
    
    int main()
    {
        using namespace std;
        ifstream datei("Wertetabelle.txt");
        if( !datei.is_open() )
        {
            cerr << "Fehler beim Oeffnen der Datei" << endl;
            return 0;
        }
        double a, b;
        for( ; datei >> a >> b; datei.ignore( 9999, '\n' ) )
        {
            if( anforderung_erfuellt( a, b ) )
                break; // Ok
        }
        if( !datei )
        {
            if( datei.eof() )
                cout << "gewuenschte Werte sind nicht in der Tabelle enthalten" << endl;
            else
                cout << "Formatfehler beim Lesen(!)" << endl;
            return 0;
        }
        // else 
        // Ok - die Variablen a und b enthalten die gelesenen Werte
    
        return 0;
    }
    

    Gruß
    Werner


Anmelden zum Antworten