if & else C++ Syntax
sergej
- programmiertechnik
0 Christian Kruse0 sergej
0 Marko0 Christian Kruse0 sergej0 Christian Kruse0 Marko
0 Marko0 Klaus Mock
Hallo Ihr Menschen :-)
folgendes Problem : wenn ich bei folgendem Programmchen "j" eingebe, teilt dieses den eingegebenen Wert durch 2. Wenn ich "n" eingebe, schreibt er zwar das "Auf Wiedersehen" teilt aber dennoch durch 2 und gibt es aus.
Was mache ich falsch?
=====================================================================
#include <iostream.h>
int main ()
{
cout << "Bitte einen Wert eingeben ";
int w;
cin >> w;
cout << "Sie haben "" << w << "" eingegeben\n\n";
cout <<"Wollen Sie diesen Wert durch 2 teilen?\n";
cout << "fuer ja bitte "j" eingeben, fuer nein "n" \n\n";
char auswahl;
cin >> auswahl;
if (auswahl =='n')
cout << "Auf Wiedersehen\n\n";
else (auswahl == 'j');
cout << "Das Ergebnis ist " << w/2 <<"\n";
return 0;
}
=====================================================================
danke im voraus
S.K.
Hoi,
folgendes Problem : wenn ich bei folgendem Programmchen "j"
eingebe, teilt dieses den eingegebenen Wert durch 2. Wenn ich "n"
eingebe, schreibt er zwar das "Auf Wiedersehen" teilt aber dennoch
durch 2 und gibt es aus.
Was mache ich falsch?
cout << "Bitte einen Wert eingeben ";
du solltest std::cout schreiben, oder 'using namespace std' ueber
'int main'.
cin >> w;
Fuer cin gilt dasselbe.
cout << "Sie haben "" << w << "" eingegeben\n\n";
statt '\n' wuerde ich std::endl benutzen, aber das ist wohl
Geschmacksache.
else (auswahl == 'j');
Der Fehler liegt hier. Mach mal das Semikolon weg.
Gruesse,
c.j.k
hi,
wow... das war ne schnelle Antwort :-)
Semikolon habe ich weggemacht, jetzt meckert der Compiler :
=================================================================
D:\CCD\Meine Programme\Übung\Übung1\übung1.cpp(23) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'cout'
Fehler beim Ausführen von cl.exe.
übung1.exe - 1 Fehler, 0 Warnung(en)
==================================================================
.........
char auswahl;
cin >> auswahl;
if (auswahl =='n')
cout << "Auf Wiedersehen\n\n";
else (auswahl == 'j') // hier sollte das ; ja weg
cout << "Das Ergebnis ist " << w/2 <<"\n";
..........
Hoi,
=================================================================
D:\CCD\Meine Programme\Übung\Übung1\übung1.cpp(23) : error C2146: Syntaxfehler : Fehlendes ';' vor Bezeichner 'cout'
Fehler beim Ausführen von cl.exe.
übung1.exe - 1 Fehler, 0 Warnung(en)
==================================================================
Du weisst aber schon, dass...
else (auswahl == 'j') // hier sollte das ; ja weg
cout << "Das Ergebnis ist " << w/2 <<"\n";
das entweder
else
cout << "Das Ergebnis ist " << w/2 <<"\n";
oder
else if(auswahl == 'j')
cout << "Das Ergebnis ist " << w/2 <<"\n";
heissen muss?
BTW, es heisst
#include <iostream>
und das 'using namespace std' war kein Witz.
Gruesse,
c.j.k
Ah, ok :-)
Danke... Ich glaube ich hab es jetzt.
Bis demnächst. Ich werde euch noch des Öffteren mit C++ quälen.
8-) Also entspannt euch nicht . hhehe
S.K.
Hej Sergej,
was hälst Du von Klammer, wenn etwas zusammenghören soll ;o)?
if (auswahl =='n')
cout << "Auf Wiedersehen\n\n";
else {
cout << "Das Ergebnis ist " << w/2 <<"\n";
}
oder
----
else if ('j' == auswahl) {
cout << "Das Ergebnis ist " << w/2 <<"\n";
}
Else heißt doch, daß alles was dahinter kommt nicht der if-Anweisung enstpricht und ohne Klammern wird nur (auswahl == 'j') ausgeführt (zwar nicht sinnvoll, aber wird trotzdem gemacht.
Viel Spaß noch, beim lernen ;o),
Marko
Hoi,
was hälst Du von Klammer, wenn etwas zusammenghören soll ;o)?
Das ist in dem Fall nicht sinnvoll. Bloecke grenzen eine Abfolge von
Befehlen ein, hier soll allerdings nur ein Befehl ausgefuehrt werden.
Else heißt doch, daß alles was dahinter kommt nicht der
if-Anweisung enstpricht und ohne Klammern wird nur (auswahl == 'j')
ausgeführt (zwar nicht sinnvoll, aber wird trotzdem gemacht.
Das ist leider falsch. In diesem Zusammenhang stimmt das, wegen des
Semikolons direkt hinter dem 'else', aber generell ist das falsch. Die
Definition sieht so aus:
if(Expression)
Block oder Befehl
else
Block oder Befehl
Also
if(1)
irgendwas();
else
irgendwas();
ist durchaus richtig und gueltig.
Gruesse,
c.j.k
ist dann dieses nicht richtig?
(gehet tuht das :-) ).
=====================================================================
char auswahl;
cin >> auswahl;
if (auswahl =='n')
cout << "Auf Wiedersehen\n\n";
else if ('j' == auswahl) {
cout << "Das Ergebnis ist " << w/2 <<"\n";
}
=====================================================================
Hoi,
ist dann dieses nicht richtig?
[...]
Ja. Siehe </?m=55534&t=10018>
Gruesse,
c.j.k
Hej Sergej,
das wäre auch richtig, allerdings würde ein zusätzlicher else-Zweig sinnvoll sein, denn es kann ja mal vorkommen, daß man/frau auch etwas anderes als j/n eingibt.
Marko
Hej Christian,
Das ist in dem Fall nicht sinnvoll. Bloecke grenzen eine Abfolge von
Befehlen ein, hier soll allerdings nur ein Befehl ausgefuehrt werden.
ich habe da so dunkel gewisse Programmierrichtlinien in Erinnerung:
Ziel ist es möglichst leserlichen und nciht möglichst kurzen Code zu schreiben.
Um Fehlern also vorzubeugen, sollte man einfach mal Blöcke verwenden.
Das ist leider falsch. In diesem Zusammenhang stimmt das, wegen des
Semikolons direkt hinter dem 'else', aber generell ist das falsch. Die
Definition sieht so aus:
Letzendlich habe ich Deine Zeilen nur in Worte gefaßt, aber ist auch ok, wenn Du su als falsch betitelst *lach*.
Schöne Grüße aus dem Westen,
Marko
Hi Marko,
ich habe da so dunkel gewisse Programmierrichtlinien in Erinnerung:
Ziel ist es möglichst leserlichen und nciht möglichst kurzen Code zu schreiben.
Um Fehlern also vorzubeugen, sollte man einfach mal Blöcke verwenden.
genau deswegen sind Blöcke auch in diesem Fall sinnvoll. Falls wirklich ein Compiler den Stack sichert in dem Fall, und nicht erkennt, dass man das in dem Fall nicht braucht, ist der Overhead in der allermeisten Fällen zu vernachlässigen. Da gibt es sicher andere Stellen im Programm, bei denen man eher die Laufzeit optimieren kann.
Grundsätzlich geht Wartbarkeit und Vermeidung von potentiellen Fehlerquellen vor dem letzten Quentchen Performance.
Gruß,
Martin
Hallo,
was hälst Du von Klammer, wenn etwas zusammenghören soll ;o)?
Das ist in dem Fall nicht sinnvoll. Bloecke grenzen eine Abfolge von
Befehlen ein, hier soll allerdings nur ein Befehl ausgefuehrt werden.
Wobei Blöcke aber AFAIK zu noch etwas anderes dienen. Sie definieren einen neuen Gültigkeitsbereich (steinige mich jetzt nicht wegen der eventuell nicht 'normgerechten' Wortwahl).
Dadurch können Blöcke auch ohne Verzweigungen oder Schleifen durchaus sinnvoll sein.
Beispiel:
char buf[100];
machwasmit(buf);
...
machnochwas(buf);
{
char buf[200];
tuwasmit(buf);
tunochwasmit(buf);
}
undweitermitoriginalem(buf);
Je nach Compiler (und dessen Optimierungsvermögen) heißt das allerdings auch, daß Blöcke zusätzlichen Maschinencode bedeuten. Nämlich zumindest um den Stack(pointer) am Anfang des Blockes zu sichern, und diesen am Ende wieder herzustellen.
Grüße
Klaus
Hoi,
was hälst Du von Klammer, wenn etwas zusammenghören soll ;o)?
Das ist in dem Fall nicht sinnvoll. Bloecke grenzen eine
Abfolge von Befehlen ein, hier soll allerdings nur ein Befehl
ausgefuehrt werden.
Wobei Blöcke aber AFAIK zu noch etwas anderes dienen. Sie
definieren einen neuen Gültigkeitsbereich (steinige mich jetzt
nicht wegen der eventuell nicht 'normgerechten' Wortwahl).
Ja, ganz genau. Und genau...
[...]
Je nach Compiler (und dessen Optimierungsvermögen) heißt das
allerdings auch, daß Blöcke zusätzlichen Maschinencode bedeuten.
Nämlich zumindest um den Stack(pointer) am Anfang des Blockes zu
sichern, und diesen am Ende wieder herzustellen.
... deshalb halte ich die Block-um-jeden-Preis-Einstellung nicht fuer
sinnvoll ;-)
Gruesse,
c.j.k