problem mit bool variable



  • Hi Leute!

    Hab das Problem, dass die boolsches Variable b immer auf false gesetzt wird.
    Kann mir bitte wer helfen.
    Hab die Variable als true deklariert und sie soll sich nur änderen, wenn in der FOR Schleife eine IF Bedingung erfüllt ist. Aber das geht irgendwie nicht.

    Danke für Hinweise.

    Johannes

    #include <fstream> 
    #include <iostream> 
    #include <vector> 
    #include <string> 
    
    using namespace std; 
    int main(int argc, char **argv)
    
     { 
      string str; 
      fstream f;
      string dateiname;
      vector<string> vec;
      string output;
    
      string C=" ";
      string S=" ";
      string L=" ";
    
      string data;          
    
            long int a=0;  
            int ii=0;
            int i=0;
            long int add=0;
            bool b = true;
    
            int c=0;
    
    // Variablen für Berechnung
    char* StopPosition = 0;
    
      cout << "******************************************************"<<endl;
      cout << "*    TEXTFILTER PROGRAMM -        Johannes JAN 2006  *"<<endl;
    
      cout << "******************************************************"<<endl;
      cout << "*      Bitte zu oeffnende Datei mit PFAD eingeben    *"<<endl;
      cout << "*      PFAD unbeding mit \\ angeben!                 *"<<endl;
      cout << "*      Bsp.: C:\\dateien\\filename                   *"<<endl;
      cout << "******************************************************"<<endl;
    
    getline(cin, dateiname); 
    ifstream ifs(dateiname.c_str());
    
    while (!ifs.eof()) {  // Einlesen der DATEI
    getline(ifs, str);                     // Datei wird Zeile in Vector vec
    vec.push_back(str);                     // Zeile wird an Vektor 
    a++;  
    
    }
    
       	f.open("c:\\out30.csv",ios::out); 
    
    	for(ii=0;ii<=15;++ii) 
    
    	{ 
    	  cout << vec[ii].substr(111,1) << endl;
    
                if (vec[ii].substr(111,1)=="C")
    
                {            
                C=vec[ii].substr(24,52);
                C+=";"; 
    			b=false;
    			cout << "C erkannt "<<endl; 	                      
                }
    
                if (vec[ii].substr(111,1)=="S")
    
                {
                S=vec[ii].substr(24,52);
                S+=";"; 
    	   b=false;
    	   cout << "S erkannt "<<endl;	                            
                }
    
                if (vec[ii].substr(111,1)=="L")   
                {
                L=vec[ii].substr(24,52);
                L+=";"; 	
    	   b=false;
    	   cout << "L erkannt "<<endl;	 	                         
                }
    
                cout << b << endl;	// Wie kann es sein, dass b immer false ist
                                         // ? Was mache ich da falsch    
    
    		if (b==true) 
    
            {
             // ... langer Anweisungsblock
    			}
    	f << vec[ii] << endl; 
    } 
    
    if (!f)
    
    {
    cout << "Die Ausgabe in die Datei hat nicht funktioniert" << endl;
    }
    
    else
    
    {    
    f.close();
    cout <<"Datei erzeugt!" <<endl;   
    }
    
    cin >> a;
    
    };
    


  • Hallo

    Wann wird die Variable den auf false gesetzt. Du machst es in deinem Code doch selber. Wo soll es denn true sein?

    chrische



  • hi!

    sorry, ahbe mich anscheinend zu unklar ausgedrückt.

    Für den Anweisungsblock

    if (b==true) 
    
            {
             // ... langer Anweisungsblock
                }
    

    soll b true sein. Das soll dann passieren, wenn der einstellige Substring

    vec[ii].substr(111,1) weder C, L oder S als Sting enthält.
    Die oben angeführte if Schleife wird aber nie angesprochen, da b immer auf false gestellt wird, auch wenn der Substring keine der 3 gesuchten Buchstaben enthält.

    Danke,

    Johannes



  • Ich vermute mal (so ganz ins blaue), dass b einfach false bleibt, nachdem sie einmal auf false gesetzt wurde. Du solltest Dich also nicht fragen warum b false wird, sondern warum b false bleibt...



  • Danke!

    Das wars!
    Oft liegen die Fehler in den einfachen Sachen!

    Danke!

    johannes



  • If( b == true ) ist redundant, da der Ausdruck auf true oder false ausgewertet wird, somit prüfst du zuerst ob b == true und das Ergebnis dieses Vergleiches wird von dem If auf true oder false abgeprüft. If( b ) genügt vollkommen, hier wird der Ausdruck, in dem Fall die Variable b, auf true oder false abgeprüft.



  • Any schrieb:

    If( b == true ) ist redundant,...

    Es gibt Leute die das als "besser lesbar" bezeichnen. Ich übrigens nicht.



  • Any schrieb:

    If( b == true ) ist redundant, da der Ausdruck auf true oder false ausgewertet wird, somit prüfst du zuerst ob b == true und das Ergebnis dieses Vergleiches wird von dem If auf true oder false abgeprüft. If( b ) genügt vollkommen, hier wird der Ausdruck, in dem Fall die Variable b, auf true oder false abgeprüft.

    Es gibt auch den Kompiler der das wegoptimiert.


Anmelden zum Antworten