char* von if nicht erkannt



  • ok. ich habs jetzt nochma mit einer const std::string & probiert.

    Header:

    //...
    void einfuegen (const std::string &, koord* );
    //...
    

    Implementierung:

    //...
    void einfuegen (const std::string & a, koord* koords) {
         int qqq=0;
         if (a == "Frankfurt" || a == "EDDF" || a == "eddf" || a == "FRA" ||
            a == "fra" ||a == "frankfurt" || a == "FRANKFURT") {
              a = "Frankfurt";
              koords->lg=50;koords->lm=1;koords->lae='N';koords->bg=8;
              koords->bm=32;koords->bre='O';koords->ls=35;koords->bs=35;
              }
    //...
    }
    

    Aufruf mit:

    einfuegen ( rstart, &koords );
    

    rstart ist:

    const string & rstart=start;
    

    Leider bekomme ich jetzt folgende Fehlermeldung:

    passing `const std::string' as `this' argument of `std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' discards qualifiers
    

    und zwar genauso oft, wie ich

    a = "Frankfurt";
    

    verwendet habe. Hier liegt auch die Fehlerzeile.

    Jetzt blick ich überhaupt nicht mehr durch.

    mfg

    Tim



  • an drakon:

    ich mach des ganze mit zeigern, weil ich den wert ändern will, so dass, wenn man z.B. frankfurt eingibt, die Funktion die richtige Rechtschreibung einsetzt.

    mfg

    Tim



  • const paßt leider vorläufig nicht zu deinem entwurf.



  • Tim1995 schrieb:

    ich mach des ganze mit zeigern, weil ich den wert ändern will, so dass, wenn man z.B. frankfurt eingibt, die Funktion die richtige Rechtschreibung einsetzt.

    Dafür kannst du auch (Non-Const-)Referenzen einsetzen.



  • OK.

    Ich hab des const weggemacht.

    Das if erkennt immer noch nicht FRA.

    Vielleicht ist die Eingabe irgendwie net ok ?

    ich mach das so:

    cin >> start;
    einfuegen ( rstart, &koords );
    

    mfg

    Tim 😕 😡 😮



  • Tim1995 schrieb:

    Vielleicht ist die Eingabe irgendwie net ok ?
    ich mach das so:

    cin >> start;
    einfuegen ( rstart, &koords );
    

    dein erkennungscode ist ok.

    aber warum tust du start einlesen und rstart übergeben?

    wenn es wirklich start und rstart geben soll, dann entweder

    cin >> start;
    string rstart=start;
    einfuegen ( rstart, &koords );
    

    oder besser

    cin >> start;
    string rstart=einfuegen ( rstart, &koords );
    

    aber super hübsch isses noch net, weil du dummerweise 2 rückgabewerte hast.

    perfekt wäre ne struktur aus name und koordinaten, glaub ich.



  • OK. Nach Idee von volkard ganz neue Art.
    Sie klappt!!!! Endlich!!!

    Header:

    //...
    koord einfuegen ( koord );
    //...
    

    Implementierung:

    koord einfuegen (koord koords) {
         int qqq=0;
         koord rueck;
         if (koords.name == "Frankfurt" || koords.name == "EDDF" || 
            koords.name == "eddf" || koords.name == "FRA" ||
            koords.name == "fra" || koords.name == "frankfurt" || 
            koords.name == "FRANKFURT") {
              rueck.name = "Frankfurt";
              rueck.lg=50;rueck.lm=1;rueck.lae='N';rueck.bg=8;
              rueck.bm=32;rueck.bre='O';rueck.ls=35;rueck.bs=35;
              }
    //...
    }
    

    Aufruf mit:

    koords=einfuegen ( koords );
    

    Vielen Dank euch allen.

    Tim 👍 😉 🙂



  • Um das ganze etwas schöne zu gestalten würde ich die Eingabe einfach auf lower case umwandeln und dann überprüfen. (sofern das innerhalb des Namens ebenfalls erlaubt sein soll; ansonsten könntest du auch nur den ersten Buchstaben umwandeln)

    http://www.cplusplus.com/reference/clibrary/cctype/tolower.html

    Und dann würde ich da noch ein wenig auf die Einrückung achten. Klammern sollten immer zu einem Block gehören, welchen man erkennen sollte.

    z.B so:

    if ( blabla ){
        ...
    }
    

    oder

    if ( blabla )
    {
        ...
    }
    

    aber sicher nicht:

    if ( blabla ){
       ...
       }
    


  • ich habs eben nur nit einem if probiert.
    Wenn ich jetzt z.B. London dazunehme, gehts wieder nicht und der Flughafen wird wieder ncicht erkannt.

    koord einfuegen (koord koords) {
         int qqq=0;
         koord rueck;
         if (koords.name == "Frankfurt" || koords.name == "EDDF" || 
            koords.name == "eddf" || koords.name == "FRA" ||
            koords.name == "fra" || koords.name == "frankfurt" || 
            koords.name == "FRANKFURT") {
              rueck.name = "Frankfurt";
              rueck.lg=50;rueck.lm=1;rueck.lae='N';rueck.bg=8;
              rueck.bm=32;rueck.bre='O';rueck.ls=35;rueck.bs=35;
              }
         if ( koords.name == "London" || koords.name == "london" || 
            koords.name == "EGLL" || koords.name == "egll" || 
            koords.name == "LHR" || koords.name == "lhr" || 
            koords.name == "LONDON" ) {
              rueck.name = "London";
              rueck.lg=51;rueck.lm=28;rueck.lae='N';rueck.bg=0;
              rueck.bm=27;rueck.bre='W';rueck.ls=39;rueck.bs=41;
              }
    //..
    }
    

    um hilfe wird gebeten,

    Tim



  • Schau doch mit dem Debugger, ob die Werte innerhalb der Funktion dem entsprechen, was du erwartest. Dann findest du schnell heraus, wo es happert.



  • ganz blöde frage, aber wie mache ich das mit dev-c++ ?



  • Tim1995 schrieb:

    ganz blöde frage, aber wie mache ich das mit dev-c++ ?

    Lies die Anleitung deiner Entwicklungsumgebung. Und wenn du dir wirklich einen gefallen tun willst: Ersetze sie! (die Entwicklung von DevC++ ist eingestellt; alternativen wären z.B. die beiden kostenlosen IDEs Microsoft Visual C++ Express 2008 oder Code::Blocks).



  • immer, wenn das ergebnis feststeht, sofort return machen, dann werden die else-geschichten ein wenig entschärft.

    koord einfuegen (koord koords) {
         int qqq=0;
         koord rueck;
         if (koords.name == "Frankfurt" || koords.name == "EDDF" || 
            koords.name == "eddf" || koords.name == "FRA" ||
            koords.name == "fra" || koords.name == "frankfurt" || 
            koords.name == "FRANKFURT") {
              rueck.name = "Frankfurt";
              rueck.lg=50;rueck.lm=1;rueck.lae='N';rueck.bg=8;
              rueck.bm=32;rueck.bre='O';rueck.ls=35;rueck.bs=35;
              return;
              }
         if ( koords.name == "London" || koords.name == "london" || 
            koords.name == "EGLL" || koords.name == "egll" || 
            koords.name == "LHR" || koords.name == "lhr" || 
            koords.name == "LONDON" ) {
              rueck.name = "London";
              rueck.lg=51;rueck.lm=28;rueck.lae='N';rueck.bg=0;
              rueck.bm=27;rueck.bre='W';rueck.ls=39;rueck.bs=41;
              return;
              }
    //..
       //kram machen, der zu machen ist, wenn nix erkannt wurde. 
    }
    

    und geh echt von DevC++ weg.



  • Die Sache sähe ein wenig übersichtlicher aus, wenn man die Namen in einem Array speichern würde und dann per Schleife prüft. Am besten in einer eigenen Funktion...



  • jetzt gehts. ich musst else if statt nur if nehmen.

    mfg

    Tim


Anmelden zum Antworten