Daten auslesen - Es funktioniert, aber irgendwie versteh ich es nicht...



  • so mal eben der code:

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main(){
    
        int we;
    
        string name;
        string geschlecht;
        string alter;
        string groesse;
        string gewicht;
        string datensatz;
        string s_name;
    
        cout << "Daten auslesen" << endl;
        cout << "gesuchter name: " << endl;
        cin >> s_name;
        //ofstream file("save_test.txt", ios::in);
    
        ifstream r_file;  // Datei-Handle
        string s;
        r_file.open("save_test.txt", ios::in); // Öffne Datei aus Parameter
        while (!r_file.eof())          // Solange noch Daten vorliegen
        {
    
            getline(r_file, s);        // Lese eine Zeile
            string suche(s_name);
            if(!s.find(suche)){
            cout << s << endl;    // Zeige sie auf dem Bildschirm
            }
        }
        r_file.close();
    
        cin >> we;
    
    return 0;
    }
    

    es funzt, nur irgendwie erscheint mir das hier unlogisch...

    getline(r_file, s);        // Lese eine Zeile
            string suche(s_name);
            if(!s.find(suche)){
            cout << s << endl;    // Zeige sie auf dem Bildschirm
            }
    

    genauer: if(**!**s.find(suche)){
    nen denkfehler von mir?
    denn ich sage ja wenn nicht das gesuchte gefunden wird - anzeigen.
    allerdings genau in dieser konstellation wird der richtige datensatz angezeigt.
    Lass ich die Negation weg, werden alle bis auf der gesuchte Datensatz angezeigt.

    Kann mir das mal jemand bitte erklären?

    Danke!



  • Die Abfrage auf ! schliesst 0 mit ein. Wenn 0 aber der Rückgabewert ist, dann trifft das auch zu.

    returns the first occurrence of str within the current string, starting at index, string::npos if nothing is found,

    http://cppreference.com/cppstring/find.html
    Überprüfe die Rückgabe bitte auf string::npos
    lg


Anmelden zum Antworten