char* von if nicht erkannt
-
Warum machst du das da überhaupt mit Zeigern? - Du kannst ja auch einen normalen (ev. const) string übergeben. Ist üblicher, als da etwas mit Zeiger zu machen. Vor allem ist der Aufruf auch intuitiver.
Der gegebene Code sollte allerdings funktionieren. Also wird etwas beim Aufruf schief gehen.
-
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 qualifiersund 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