mehrere If Anweisungen + Rückgabewerte



  • Guten Morgen,
    ich habe mal wieder eine Frage. Und zwar habe ich eine Funktion geschrieben, welche mehrere If Anweisungen beinhaltet. In diesen If Anweisungen sind Parameter die ich in Variablen speichere und weiterverwenden möchte. Zur Überprüfung wollte ich einen Parameter mir ausgeben lassen, jedoch erscheint dieser nicht in meiner Konsole.
    Evt. kann mir einer helfen. Ich könnte mir vorstellen, dass ich die jeweiligen Rückgabewerte brauche aber dann würde die If Anweisung beim Rückgabewert zu ende sein.
    Hier mein Code:

    int handleVersion1(string buffer){
    string actualLine;
    string ID;
    string func;
    string colourLower;
    string colourUpper;
    istringstream stream_2(buffer);
    while(stream_2!=0){
    getline(stream_2, actualLine);
    if (!strcmp(actualLine.substr(0,8).c_str(),"MyRoboID")){
    string ID = actualLine.substr(11);
    cout << "MyRoboID " << actualLine.substr(11) << endl;
    }
    if(!strcmp(actualLine.substr(0,7).c_str(), "MyFunct")){
    string func = actualLine.substr(9);
    cout << "MyFunct" << actualLine.substr(9) <<endl;
    }
    if(!strcmp(actualLine.substr(0,13).c_str(), "MyColourLower")){
    string colourLower = actualLine.substr(15);
    cout << "MyColourLower" << actualLine.substr(15) <<endl;
    }
    if(!strcmp(actualLine.substr(0,13).c_str(), "MyColourUpper")){
    string colourUpper = actualLine.substr(15);
    cout << "MyColourUpper" << actualLine.substr(15) <<endl;
    }
    }
    cout << colourLower << endl; // dieser Wert wird in der Konsole nicht ausgegeben die anderen vorher schon.
    return 0;
    }

    ich bedanke mich schon mal im voraus! DANKE



  • Ingenieurin schrieb:

    int handleVersion1(string buffer){
         string actualLine;
         string ID;
         string func;
         string colourLower;
         string colourUpper;
         istringstream stream_2(buffer);
         while(stream_2!=0){
            getline(stream_2, actualLine);
            if (!strcmp(actualLine.substr(0,8).c_str(),"MyRoboID")){
                string ID = actualLine.substr(11);
                cout << "MyRoboID " << actualLine.substr(11) << endl;
            }
            if(!strcmp(actualLine.substr(0,7).c_str(), "MyFunct")){
                string func = actualLine.substr(9);
                cout << "MyFunct" << actualLine.substr(9) <<endl;
            }
            if(!strcmp(actualLine.substr(0,13).c_str(), "MyColourLower")){
                string colourLower = actualLine.substr(15);
                cout << "MyColourLower" << actualLine.substr(15) <<endl;
            }
            if(!strcmp(actualLine.substr(0,13).c_str(), "MyColourUpper")){
                string colourUpper = actualLine.substr(15);
                cout << "MyColourUpper" << actualLine.substr(15) <<endl;
            }
         }
        cout << colourLower << endl; // dieser Wert wird in der Konsole nicht  ausgegeben die anderen vorher schon. 
        return 0;
    }
    

    das liegt vielleicht daran, dass colourLower leer ist. Ändere die Zeile 27 mal nach

    cout << "[" << colourLower << "]" << endl;
    

    dann siehst Du wahrscheinlich ein

    []
    

    auf der Konsole



  • das die Variable leer ist hab ich mir fast gedacht, aber in Zeile 20 wird mir dieser Wert doch ausgegeben. und ich dachte wenn ich

    string colourLower = actualLine.substr(15);

    schreibe, dann bekommt meine Variable colourLower den Wert zugewiesen.
    Wie könnte ich es denn machen, dass er mir die Werte speichert und ich diese weiter verwenden kann?



  • Beachte den Gültigkeitsbereich deiner Variablen.
    In Zeile 19 hast du eine Definition einer neuen Variablen. Diese lebt nur innerhalb der If-Bedingung und hat nichts mit der Variablen zu tun, die du in Zeile 5 definiert hast.



  • ah ok, also leben Variablen die in einer If Anweisung entstehen immer nur innerhalb ihrer Anweisung. Wie bekomme ich es denn hin, dass diese auch außerhalb der Anweisung verwendbar wird?



  • Indem du sie außerhalb definierst.

    Das hat auch nichts mit der If-Anweisung zu tun, sondern mit dem Anweisungsblock in dem die Variable definiert ist. Das ist bei for oder while oder ... nicht anders.
    Für das colourLower aus Zeile 19 fängt der in Zeile 18 bei der { an und hört in Zeile 21 bei der } auf.



  • Eben keine neue anlegen, sondern die existierende benutzen:

    colourLower = actualLine.substr(15);
    


  • super danke! habs nun auch gemerkt 🙂 manchmal kann eine Lösung ja so simpel sein 🙂

    DANKE!!!


  • Mod

    A propos simpel:

    !strcmp(actualLine.substr(0,13).c_str(), "MyColourUpper")
    

    ->

    actualLine.substr(0,13) == "MyColourUpper"
    

Log in to reply