ich C++ scheint es keine elseif-Anweisung zu geben.
switch…case:-akzepteirt nur genzzahlige werte und meinen eingegebenen String einzeln zu prüfen, mit je einer if-Abfrage, will ich eigendlich nicht, da ich so kein generelles else bekomme.
Wie geht das in C++??
Die Hilfe bzw das Handbuch sagen mir dazu nichts.
Hallo Desian,
Die Lösung heisst verschachtelte Bedingungen!
Dies ist doch ganz einfach und funktioniert in jeder Programmiersprache!
(Hmmm… Vielleicht wäre ein C/C++ Buch doch nicht schlecht
if (a) {
}
else {
if (b) {
}
else {
if (c) {
}
else {
}
}
}
ist eine sog. „if-else-Leiter“. In C ist so was aber gefährlich, weil ein „else“ immer zum letzten else-losen „if“ gehört. Die geklammerte Version ist dagegen absolut sicher:
if() {}
else { if(){} }
else { if(){} }
else {}
Und es stimmt, ein C++ Buch ist eine feine Sache ))
Was soll mir jetzt dein Artikel sagen? Ich habe halt zu schnell geantwortet und mich vertan, kann doch mal passieren, oder? Ich kann halt noch nicht so toll programmieren wie du!
Aber an dem Inhalt meiner Aussage ändert sich nichts: Nur die korrekt(!) geklammerte Version ist absolut sicher, weil eben ein else immer zum letzten else-losen if gehört …
Daß man Wörter wie ‚absolut sicher‘ nur benutzen sollte, wenn man sich absolut sicher ist.
Ich kann halt noch nicht so toll programmieren wie du!
Du weißt garnicht, wie toll ich programmieren kann. Ich habe auch nur eine kurze spitze Bemerkung gemacht, weil Du Dir absolut sicher warst. Kein Grund zur Aufregung.
Aber an dem Inhalt meiner Aussage ändert sich nichts: Nur die
korrekt(!) geklammerte Version ist absolut sicher, weil eben
ein else immer zum letzten else-losen if gehört …
Schaun wa mal: Wenn Du tatsächlich s/elseif/else if/g benutzt, also blind ersetzt, bekommst Du folgende Struktur:
if (Bedingung1)
Block
else if (Bedingung2)
Block
else if (Bedingung3)
Block
else
Block
Der Vorteil von C (zB. im Gegensatz zu Perl) ist nun, daß nach if oder else ein beliebiger Ausdruck folgen kann, also auch eine neue if…else-Gruppe. Da aber die gesamte if-else-Gruppe genau ein Ausdruck ist, landet jedes else automatisch beim richtigen if.
Das kannst Du mit Klammern unterstützen, wenn Dir das lieber ist, aber Du siehst ja, was dabei herauskommen kann. Ich möchte denn auch meine andere Nachricht einschränken: In einer solchen Struktur würde ich nur für die Blöcke Klammern benutzen (da aber auf jeden Fall, auch wenn der Block nur einen Ausdruck enthält), nicht für die geschachtelten ifs. Dadaurch bekommt man genau das, was man erwartet.
> > if (Bedingung1)
> > Block
> > else if (Bedingung2)
> > Block
> > else if (Bedingung3)
> > Block
> > else
> > Block
Was ist denn, wenn ein Block aus einer einzigen if-Bedingung
besteht
Wer lesen kann (und sauber zitiert), ist klar im Vorteil:
In einer solchen Struktur würde ich nur für die Blöcke
Klammern benutzen (da aber auf jeden Fall, auch wenn
der Block nur einen Ausdruck enthält), nicht für die
geschachtelten ifs.
Wer lesen kann, ist klar im Vorteil: Da steht Block, ein Block besteht aus zwei Klammern, zwischen denen sich beliebig viele Ausdrücke tummeln.
Deswegen ist die Form
> if (Bedingung1)
> { Block }
> else if (Bedingung2)
> { Block }
> else if (Bedingung3)
> { Block }
> else
> { Block }
einfach sicherer!
Ich würde Blöcke nicht ein zweites mal klammern, ansonsten ist das genau das, was ich Dir nahelegen will.
Eben, wer lesen kann ist klar im Vorteil. Genau das meine ich ja die ganze Zeit, dass man die Anweisungen hinter den if’s immer schön klammern sollte. Das habe ich schon vor zig Postings gesagt, ich habe mich nur bei der Syntax verschrieben.
Ich dachte, du würdest etwas anderes meinen, weil sonst schon dein vorletztes Posting keinen Sinn mehr gemacht hätte …
etwas anderes läßt sich aus der Diskussion noch lernen:
Benutze immer Blöcke nach if und else.
Naja, hinter „else“ braucht man bei der if-else-Leiter eigentlich keine Blöcke. Das ist nur unnötige Tipparbeit. Es reicht völlig, Blöcke nur hinter den if’s zu verwenden!
Eben, wer lesen kann ist klar im Vorteil. Genau das meine ich
ja die ganze Zeit, dass man die Anweisungen hinter den if’s
immer schön klammern sollte.
Warum sagst Du’s dann nicht bzw. versuchst, meine Version zu widerlegen?
Ich dachte, du würdest etwas anderes meinen, weil sonst schon
dein vorletztes Posting keinen Sinn mehr gemacht hätte …
Wie bitte? Was ich schreibe stimmt, also nimmst Du an, daß ich etwas meine, was ich nicht schreibe, damit Du sagen kannst, daß das, was ich schreibe, falsch ist? Habe ich das in etwas richtig nachvollzogen?