.| Autor | Beitrag |
|---|---|
|
000 16.12.2002, 22:00 Worldcraft Loser |
Hi zusammen. Also ich hab vor ca 4 Tagen angefangen C++ zu lernen. So aber wen ich 2 drücke kom ich trotzdem in Additions verfahren. #include <iostream.h> cout<<"Bitte wähle deine Rechenart: "<<endl; if(rechenart=limit+2) }; Danke schonmal im vorraus! Worldcraft Loser €dit: (\_/) Dieser Beitrag wurde am 16.12.2002 um 22:01 von Worldcraft Loser bearbeitet. |
|
Profil || Suche |
|
001 16.12.2002, 22:14 gerk |
hoppla.. es muss -)mal abegesen davon, was soll das mit dem limit? Das kannst du weglassen und nur auf die zahl hin überprüfen. des weiteren muss es Das Suffix 'f' muss dahin, weil der Compiler sonst einen double draus macht. -)Deine if-blöcke müssen in geschwungene klammern ({}) eingeschlossen sein, sonst hat das ganze wenig sinn. -)Die klammer weglassen kannst du nur, wenn du nur eine anweisung hast. -)Als nächstes: warum deklarierst du immer floats? für die menü-auswahl würde es (zb) ein short auch tun. -)UND, wie man im Gameprogramming-Forum nachlesen kann, muss es laut Standard int main() heißen und demensprechend ein return 0; ans ende. So, ich hoffe, ich habe dir ein wenig geholfen, und nicht allzu viel mist gepostet :) Greets, „Und da wir uns ja seit heute etwas näher gekommen sind, kann ich nur sagen: Mir hilft da immer Norther volle Lautstärke (so wie jetzt), sodass die ganzen unrasierten, Wasserpfeife rauchenden, alternativen Wichsstudenten aus ihren, aus Bananenschalen und Abfall gebastelten, Sitzkissen fliegen.“ Dieser Beitrag wurde am 16.12.2002 um 22:15 von Lag of death bearbeitet. |
|
Profil || Suche |
|
002 16.12.2002, 22:18 Tron |
= ist zuweisung, das sollte == heissen zudem: <edit> btw: es gibt das <code></code> tag, natuerlich mit eckigen klammern --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 16.12.2002 um 22:19 von Tron bearbeitet. |
|
Profil || Suche |
|
003 16.12.2002, 22:19 Worldcraft Loser |
Ja hab bisher nur von void main() gehört. Aber danke mus ich morgen mal schaun mus jetzt pennen schreib morgen ne arbeit. Aber danke --(\_/) |
|
Profil || Suche |
|
004 17.12.2002, 00:30 CorDharel |
Das ist kein "void main" sondern ein "void" und ein "main" :) Ne will heissen, main ist der Name der Funktion, und void der Rückgabewert der Funktion. main kommt nur einmal pro Programm vor, da jede Funktion einen eigenen Namen hat, aber einen Rückgabewert hat jede Funktion, darum auch "int main", d.h. die Funktion hat eine Variable vom Typ "int" als Rückgabewert. --Greetz CorDharel Leader der HolyShitBastards Dieser Beitrag wurde am 17.12.2002 um 00:31 von CorDharel bearbeitet. |
|
Profil || Suche |
|
005 17.12.2002, 05:59 K-Putt |
@Tron: Was für ein unterschied besteht denn zwischen Rambo Engineer @ Drippy's 2fort - finest TFC 1.5 || Bild Upload || The world's most advanced open source database |
|
Profil || Suche |
|
006 17.12.2002, 06:40 Tron |
hae?
die alten standardheader sind in c++ ebenfalls misbilligt, immer die .h-lose version verwenden. 'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
007 17.12.2002, 09:07 the_viking |
wofür sind eigendlich namespaces gut bzw. wie kann man eigene machen?? --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
008 17.12.2002, 09:25 Hessie J. |
Wenn man mehrere Klassenbibliotheken benutzt, kann es ja sein, dass darin gleiche Namen verwendet werden, deshalb "packt" man jede Bibliothek in ihren eigenen Namespace (die Standard-C-Library eben in std). Eigene namespaces kann man per namespace mein_namespace { eigene_deklarationen; } aufbauen. --Dieser Beitrag wurde am 17.12.2002 um 09:25 von Hessie J. bearbeitet. |
|
Profil || Suche |
|
009 17.12.2002, 10:08 Kriz |
@Tron: Naja, ob man nun die normalen Headers nimmt oder die C++ Varianten ist doch vollkommen wurscht. Nur bei merkwürdigsten Projekten, wo irgendein hodenkrebsverseuchter Spacko gemeint hat, er müßte seine eigene iostream Klassenhierarchie entwickeln, wäre es ratsam, die C++ Variante mit dem std Namensraum zu verwenden (außer dieser Spacko hat sein iostream ebenfalls in den std namensraum gepackt)... Die meisten Gesichtsmutanten dieser Welt wissen ja noch nicht mal, daß es neben den ANSI-C Headers auch C++ konforme Gegenstücke gibt, die ebenfalls ohne das .h eingebunden werden können: <stdlib.h> === <cstdlib> Nur bei solchen Dingelchens wie <string.h> gibt es <string> als Klassenimplementierung. Soviel dazu. -------------------------------------------------------------------------- Nun gut, für 4 Tage C++ nicht übel. Aber aus den Kommentaren kannst du entnehmen, daß man vieles anders machen und verbessern kann. Ich bin mal so frei und bastel dir mal eine kompakte und effizientere Version deines Programms. Und damit Trönelchen (muhahaha *ggg*, hört sich an wie Träne oso =) keinen Gehirnkrampf bekommt, nehme ich mal die reine C++ Variante und verzichte mal auf das cpp-Tag wegen den fehlenden Linefeeds (möge DP in der Linefeed-Hölle schmoren!!!): #include <iostream> void eingabeOperanten(double &refOperant1, double &refOperant2); int main() do cin >> auswahl; switch(auswahl) cout << "\n\nErgebnis = " << ergebnis << flush; }while(!beenden); void eingabeOperanten(double &refOperant1, double &refOperant2) double addieren(double operant1, double operant2) double subtrahieren(double operant1, double operant2) double multiplizieren(double operant1, double operant2) double dividieren(double operant1, double operant2) ------------------------------------------------------------------------- Funktionen dürften klar sein. Sie werden VOR main() deklariert und meistens erst nach dem main()-Block implementiert. Das & in der Funktion eingabeOperanten() bedeutet, daß eine REFERENZ der beiden double-Werte an die Funktion übergeben werden ("Call by reference"). Dadurch wird innerhalb der Funktion nicht mit Kopien von operant1 und operant2 gearbeitet, sondern direkt mit den Variablen. Somit können beide Variablen verändert werden. Bei Kopien geht das nicht, dort werden nur die Kopien verändert und nicht das Original. Alternativ hätte man auch anstatt Referenzen auch mit Zeigern arbeiten können: void eingabeOperanten(double *ptrOperant1, double *ptrOperant2) {...} Dann hätte man aber etwas mehr Arbeit, denn die Zeiger müssten erstmal dereferenziert werden, um an deren Werte ranzukommen (Zeiger beinhalten in erster Linie Variablenadressen und keine Werte!). Daher die Referenzvariante! Den logische Wert beenden kann man, sofern er auf false gesetzt ist, mit dem Postinkrement-Operator ++ auf true setzen: beenden++;. Alternativ hätte man auch schreiben können: beenden = true; Allerdings kann man ihn nicht mit beenden--; von true wieder auf false dekrementieren!!! cout << flush bedeutet, daß der Zeichenpuffer des Streams geleert wird. Damit umgehe ich das Problem, daß nach einem cin >> Variable das zwischengepufferte Linefeed ('\n') des Returntasten-Drucks im Stream verbleibt und beim nächsten cin >> Variable automatisch verwendet wird. Alternativ hätte man nach jedem cin >> Variable auch sofort den nachfolgenden Befehl cin.get(); setzen können. Die Variante mit flush ist aber irgendwie eleganter. Zur Auswahl der Funktion habe ich anstatt der if()-Abfragen eine gemeinsame switch()-Auswahl genommen. Jeder case-Eintrag bedeutet dabei einen Prüfpunkt, wo das Programm prüft, ob auswahl mit dem Wert hinter case übereinstimmt. Ist dies der Fall, führt das Programm die Anweisungen hinter case aus, ansonsten wird zum nächsten case-Prüfpunkt gesprungen. Das abschließende default bedeutet, daß switch immer dorthin springt, wenn alle vorhergehenden case-Prüfpunkte keinen Treffer liefern konnten. In unserem Falle würde das für auswahl == 0 zutreffen, also BEENDEN. Dann wird die Statusvariable beenden auf true gesetzt. Die break's in den case-Abschnitten bedeutet, daß definitiv aus switch() rausgesprungen wird, falls ein case (oder manchmal auch default) Prüfpunkt zutrifft. Würde das break fehlen in jedem case Prüfpunkt, dann würde switch() einfach immer weiter bis zum Ende von switch() alle case's durchgehen. Alles ist eingepackt in einer dicken do-while() Schleife, die als Abbruchsbedingung die logische Variable beenden besitzt. Solange beenden immer false ist, wird die Schleife wiederholt. Erst wenn man 0 eingibt, wird beenden auf true gesetzt und die Schleife bricht ab. Naja, viel Spaß beim Erlernen von C++. Geh alles Schritt für Schritt durch und versuche auch ernsthaft zu verstehen, was wie warum geht. Später bei der objektorientierten Programmierung mit Klassen, Objekten und Instanzen solltest du die C++ Grundwerkzeuge annähernd perfekt beherrschen! Cu --K:R-I)Z++ Dieser Beitrag wurde am 17.12.2002 um 10:13 von Kriz bearbeitet. |
|
Profil || Suche |
|
010 17.12.2002, 15:17 Ornest |
[ot] http://www.fremdwoerter.de |
|
Profil || Suche |
|
011 17.12.2002, 18:15 Fraghunter |
@Kriz Nihil timeo, nulla re opprimor, nulli periculo cedo. |
|
Profil || Suche |
|
012 17.12.2002, 20:26 mani |
ich glaube er meinte damit seinen code -- |
|
Profil || Suche |

