Warum bekomme ich immer -1 als Return-Wert der Funktion checkArg(const char*& ) ??



  • Servus!
    Kann mir vielleicht jemand sagen, warum ich bei folgendem Quellcode immer -1 als Return-Wert der Funktion checkArg(const char*& ) bekomme?? Irgendwie bin ich (im Moment) zu blöd den Fehler selbst zu sehen 😞

    int checkArg(const char*& currentArg);
    
    int main(int argc, char* argv[])
    {
            if(argc >= 3)
            {
                    NrSys nr;
                    for(int i = 1; i < argc; i += 2)
                    {
                            // ...
    
                            int validate = checkArg(argv[i]);
                            cout << "\n -- validate: " << validate << endl;                               
                            switch(validate)
                            {  
                                    case 0:
                                            nr.asBinar();
                                            cout << argv[i] << " im binaren Zahlensystem: " << nr.getBinar() << endl;
                                            break;
                                    case 1:
                                            nr.asDecimal();
                                            cout << argv[i] << " im dezimalen Zahlensystem: " << nr.getDecimal() << endl;
                                            break;                
                                    case 2:
                                            nr.asDecimal();
                                            cout << argv[i] << hex << " im hexadezimalen Zahlensystem: " << nr.getDecimal() << endl;
                                            break;
                                    case 3:
                                            nr.asDecimal();
                                            cout << argv[i] << oct << " im oktalen Zahlensystem: " << nr.getDecimal() << endl;
                                            break;
                                    default:
                                            help();
                                            return 0;                                        
                            }
                    }                                                                                                                                                                                                                
            }
            else
                    help();
    
            return 0;
    }        
    
    int checkArg(const char*& currentArg)
    {
            static char* args[4] = { "-b\0", "-d\0", "-h\0", "-o\0" };
    
            for(int i = 0; i < 4; ++i)
            {
                    if(args[i] == currentArg)
                            return i;    
            }
            return -1;
    }
    

    Danke euch allen im voraus!
    Caipi



  • Tjo also erstens Vergleicht man c-strings nicht mit ==, da nur der erste Buchstabe verglichen wird .

    Und dann sieht mir das & in der Funktionszeile komisch aus.
    Ich weiß nicht ob es direkt falsch ist, aber eine Referenz auf einen Pointer? Wozu.😕
    Entweder, oder! 😉



  • Wieder was dazuglernt... Danke!
    Habe es jetzt mit strcmp() gelöst.

    Bezüglich deiner Frage: Ich habe eine Referenz auf einen Zeiger genommen, da ich direkt mit dem Objekt arbeiten wollte. Denn AFAIK wird bei char-Zeigern nicht direkt mit dem Objekt gearbeitet, sondern eine Kopie angelegt.
    So hat mich (soweit ich mich erinnere) vor längerer Zeit otze korrigiert, da ich mich wunderte warum diese Funktion

    void swap(char* arg1, char* arg2)
    {
    
            char *temp = arg1;
            arg1 = arg2;
            arg2 = temp;
    }
    

    nicht funktionierte. Als ich dann aber den Funktionskopf wie folgt abänderte,

    void swap(char*& arg1, char*& arg2)
    

    funktionierte alles wunderbar.

    Caipi


Anmelden zum Antworten