manipulation von variablen
lima-city → Forum → Programmiersprachen → C/C++ und D
bedingung
bug
code
compiler
dank
endlosschleife
grad
klammern
machen
not
programm
projekt
punkt
schleife
schritt
start
system
typ
type
zahl
-
servus,
start: int zahl(1); zahl + 1; goto start
was ich möchte: die variable soll manipuliert werden aber nachdem goto soll die variable nicht neu definiert/deklariert werden.
wie geht das? oder gibts da iene lösung ohne goto
mfg splinto
Beitrag geändert: 1.6.2008 15:48:39 von splinto -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
mal dein beispiel:
int zahl = 1; start: zahl++; goto start;
Würde jetzt ne Endlosschleife geben und zahl immer hochzählen.
Und jetzt ein besseres Beispiel:
int zahl = 1; for(int i = 0; i > 1; i--) zahl++;
bewirkt an sich dasselbe.
Ergo musst du nur die Variable \"Außerhalb\" der Schleife deklarieren und sie wird dann hochgezählt.
EDIT:
schneller :P
Aber die while-schleife hätte mir auch einfallen können :/
Beitrag geändert: 1.6.2008 15:52:49 von benutzernaemelchen -
also einfach eine Schleife die zahl immer erhöht?
Das kann man ja ganz einfach mit for, while, do-while, was du halt willst machen.
zB.:
int zahl=1; while(1) // hab hier jetzt eine Endlosschleife { zahl++; }
Edit: Da war wer schneller ...
Beitrag geändert: 1.6.2008 15:52:50 von philippkern -
Hä?
Und was passt dir an unseren Vorschlägen nicht?
Bei benutzernaemelchens Bsp musst du die Anzahl der Wiederholungen definieren, bei einer zB while kannst du ja schreiben while(ende!=1) ... ok?
Edit:
Warum machst du den die Definition vor dem Label?
int zahl(1); start: // int zahl(1); // rauf damit zahl += 1; // Das war auch so nicht richtig, bei deinem gabs keine Zuweisung goto start
Beitrag geändert: 1.6.2008 16:02:23 von philippkern -
äähm ich hab das jetz eig etwas anders gemeint
Okey, dann schreib es bitte auch aus.
nur wenn eine bestimmete bedingung erfüllt ist soll die variable erhöt werden
Das können wir ja einfach mit der if- Abfrage machen :)
danach soll es wiede zu dem punkt im programm zurückkehren.
sehe da kein Problem :/, merk dir einfach, dass die Befehl von unten nach oben abgearbeitet werden, also schauen wir uns mal deinen code an
start: int zahl(1); zahl + 1; goto start
start: //Der Anfang der Sprungmarke
int zahl(1); //deklarierung und initialisierung der Variable zahl vom Typ Integer mit einer 1.
zahl + 1 ; //das wird nicht gehen, zahl = zahl + 1 oder zahl++
goto start //springt zum start und macht diese Schritte von neu.
hmm fällt uns was auf ? die Schritte nach dem Start werden wiederhollt und die variable wird wieder neu deklariert und initialisiert.
doch dann wird die variable ja neu definiert und das ist dann bissl blöd
definiert ?
int zahl(1);
Hier hast du die Variable deklariert und initialisiert, merk dir bitte :
goto nur für die Fehlerabfrage nehmen ...
Oder du kannst es so gut, dass da kein Spaghetiecode entsteht, aber in diesem Fall ist es sinnlos.
So hier mein Vorschlag :)
include <iostream> using namespace std; void main() { int zahl(1); //oder int zahl = 1 //die Do Schleife, in diesem Fall ist do { if (zahl == zahl) { zahl++; cout<<zahl<<endl; } }while(true); }
-
ja ich habe meine frage und alles andere ein bisschen unglücklich formuliert.
ich hätte eig. ein völlig anderes beispiel verwenden müssen.
jetz bin ich \"schlaukopf\" (oder wie man bei uns in bayern sagen würde: gscheidhafal) drauf gekommen die variablen vor dem lable zu deklarieren.
[edit]
jetzt hätte ich da noch ne frage und zwar:
also ich ein programm compilen wollte, sagt mir der compiler: \"expected `;\' before \'{\' token\".
aber ich habe an allen stellen wo ein \';\' (semikolon) hin muss auch eines hingeschrieben
woran liegt das?
mfg splinto
Beitrag geändert: 3.6.2008 14:39:22 von splinto -
Dann solltest du uns besser aufklären, was du möchtest und ein kleines Beispiel, dass man eine Vorstellung davon bekommt. Ansonsten wird man dir nicht helfen können bzw. es würden solche Missverständnisse entstehen, wie in diesem Beispiel....
MfG -
Meinte zu deinem Post.
Und zum Thema \";\" schau dir nochmal den gesamten Code an, weil die Fehlermeldung sagt dir, dass ein \";\" fehlt. Der muss aber nicht immer nur hinter der geschweiften Klammer sein, viell. hast du ihn einfach nur nach einer Anweisung vergessen, dann kommt nämlich die gleiche Compiler-Meldung.....
MfG -
ich habe jetz nochmals den kompletten code durchgeschaut aber es müsste alles passen
-
nein allerdings könnte ich vor jedem betreffende \'{\' oder \'}\' ein \';\' setzen aber ich weiß nicht wie sich das auf den code auswirkt
-
nein allerdings könnte ich vor jedem betreffende \'{\' oder \'}\' ein \';\' setzen aber ich weiß nicht wie sich das auf den code auswirkt
Könntest du auch mal versuchen, aberr auch von mir ohne Gewähr, da ich auch nicht weiß , ob der Compiler dir das nicht übel nimmt. Obwohll ich mir eigentlich sicher bin, dass einen Semikolon-Fehler hast, entweder vergessen oder vertippt (:).
MfG -
ich glaub ich post den code mal...
#include <iostream> #include <stdlib.h> using namespace std; int main() { game: int liv(3); int hel(100); int arm(100); int dem(100); int mon(0); int fg(dem + arm); menu: if (liv < 1) { system(\"cls\"); cout<<\"GAME OVER!\\n\\n\"; char ag; cout<<\"Play again?\\n(y/n): \"; cin>>ag; if (ag == \'y\') { goto game; } else (ag == \'n\') ;{ system(\"cls\"); } } system(\"cls\"); cout<<\"___________\\n\"; cout<<\"YOUR ROBOT:\\n\"; cout<<\"-----------\\n\\n\"; cout<<\"lives : \"<<liv<<\"\\n\"; cout<<\"-money : \"<<mon<<\"$\\n\"; cout<<\"-health: \"<<hel<<\"%\\n\"; cout<<\"-armor : \"<<arm<<\"%\\n\"; cout<<\"-demage: \"<<dem<<\"%\\n\\n\\n\\n\"; cout<<\"_____\\n\"; cout<<\"MENU:\\n\"; cout<<\"-----\\n\\n\"; cout<<\"1. shop (type \'1\')\\n\"; cout<<\"2. fight (type \'2\')\\n\"; cout<<\"3. exit (type \'3\')\\n\\n\"; cout<<\"select: \"; int selectm; cin>>selectm; if (selectm == 1) { shop: system(\"cls\"); cout<<\"_____\\n\"; cout<<\"shop:\\n\"; cout<<\"-----\\n\\n\"; cout<<\"1. chain 50$ (type \'1\')\\n\"; cout<<\"2. railgun 300$ (type \'2\')\\n\"; cout<<\"3. lasergun 700$ (type \'3\')\\n\"; cout<<\"4. exit (type \'4\')\\n\\n\"; cout<<\"select: \"; int selects; cin>>selects; if (selects == \'1\') { if (mon < \'50\') { system(\"cls\"); cout<<\"Sorry, but you have not enough money!\"; cin.clear(); cin.get(); cin.get(); goto shop; } else (mon >= \'50\') ;{ mon = mon - 50; dem = dem + 10; system(\"cls\"); cout<<\"Chain sucessfully buyed!\"; cin.clear(); cin.get(); cin.get(); goto shop; } } if (selects == \'2\') { if (mon < \'300\') { system(\"cls\"); cout<<\"Sorry, but you have not enough money!\"; cin.clear(); cin.clear(); cin.get(); goto shop; } else (mon >= \'300\') ;{ mon = mon - 300; dem = dem + 60; system(\"cls\"); cout<<\"Railgun sucessfully buyed!\"; cin.clear(); cin.get(); cin.get(); goto shop; } } if (selects == \'3\') { if (mon < \'700\') { system(\"cls\"); cout<<\"Sorry, but you have not enough money!\"; cin.clear(); cin.clear(); cin.get(); goto shop; } else (mon >= \'700\') ;{ mon = mon - 300; dem = dem + 140; system(\"cls\"); cout<<\"Lasergun sucessfully buyed!\"; cin.clear(); cin.get(); cin.get(); goto shop; } } } else if (selectm == 2) { system(\"cls\"); cout<<\"do you really want to fight?\\n\"; cout<<\"(y/n): \"; char selectf; cin>>selectf; if (selectf == \'y\') { system(\"cls\"); cout<<\"Against wich robot do you want to fight?\\n\\n\"; cout<<\"1. Robot\\n\"; cout<<\"2. Fightrobot\\n\"; cout<<\"3. Killerrobot\\n\"; cout<<\"4. Ultrarobot\\n\"; cout<<\"5. Hellrobot\\n\\n\"; int selectr; cin>>selectr; if (selectr == 1) { if (fg < 200) { cout<<\"You\'ve lost!\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 200) ;{ cout<<\"You win!\"; mon = mon + 50; cin.clear(); cin.get(); cin.get(); goto menu; } } else if (selectr == 2) { if (fg < 600) { cout<<\"You\'ve lost!\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 600) ;{ cout<<\"You win!\"; mon = mon + 150; cin.clear(); cin.get(); cin.get(); goto menu; } } else if (selectr == 3) { fg = dem + arm; if (fg < 1000) { cout<<\"You\'ve lost!\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 1000) ;{ cout<<\"You win!\"; mon = mon + 250; cin.clear(); cin.get(); cin.get(); goto menu; } } else if (selectr == 4) { fg = dem + arm; if (fg < 1400) { cout<<\"You\'ve lost!\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 1400) ;{ cout<<\"You win!\"; mon = mon + 350; cin.clear(); cin.get(); cin.get(); goto menu; } } else (selectr == 5) ;{ fg = dem + arm; if (fg < 1800) { cout<<\"You\'ve lost!\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 1800) ;{ cout<<\"You win!\"; cin.clear(); cin.get(); cin.get(); mon = mon + 500; goto menu; } } } else if (selectf == \'n\') { goto menu; } } else if (selectm == 3) { quit: system(\"cls\"); cout<<\"do you really want to quit?\\n\"; cout<<\"(y/n): \"; char lev; cin>>lev; if (lev == \'y\') { cin.clear(); } else if (lev == \'n\') { goto menu; } else { cout<<\"only type \'y\' for yes and \'n\' for no!\\n\"; cin.clear(); cin.get(); cin.get(); goto quit; } cin.clear(); } cin.clear(); cin.get(); }
also jetzt mal mit semikolons vor den klammern.
dann kann ich es compilen und es funzt nur wenn ich dann ins \"buy-menu\" geh und mir was kaufen will oder zurück will dann wird das fenster einfach geschlossen.
Beitrag geändert: 3.6.2008 15:38:51 von splinto -
Ich sehe da einige Semikolons, die theoretisch nicht stimmen:
Zeile: 30, 82, 107, 131, 177, 200, 225, 250, 261 und 275
Sind wahrscheinlich die, die versuchsweise vor die Klammern gesetzt hast....
Bei #include<iostream> fehlt das \".h\", also #include<iostream.h>
Sonst sehe ich nichts auf die Schnelle.
MfG -
äähm ich habe schon mehrere programme geschrieben mit #include <iostream> und die haben funktioniert... also ohne .h
kann das sein, dass das ein bug beim compiler ist?
Beitrag geändert: 3.6.2008 18:38:02 von splinto -
Denke eher, dass wir was übersehen... Ein Bug im Compiler schließe ich fast aus
-
Simikolon war es nicht ...
iostream passt auch, geht auch ohne .h
Du hast Integerwerte mit Strings verglichen ...
kA, woher du das hast , ich würd nie so programmieren ^^
goto und soviel Ifs, die man durch switches erstezen kann.
Naja, ich hab das jetzt gefixed und ein punkt hinzugefügt
if (selects == 4) goto menu;
edit: Aja, merk dir bitte, dass du ein Zeilenbruch machen sollst, das macht man so
cout<<\"test\"<<endl;
oder
cout<<\"test\\n\";
Das hattest du vergessen
Merk dir bitte Integerdatentyp (int) ist nur für Zahlen gedacht, du kannst keine Zeichen damit vergleichen
#include <iostream> #include <stdlib.h> using namespace std; int main() { game: int liv(3); int hel(100); int arm(100); int dem(100); int mon(0); int fg(dem + arm); menu: if (liv < 1) { system(\"cls\"); cout<<\"GAME OVER!\"<<endl; char ag; cout<<\"Play again?n(y/n): \"<<endl; cin>>ag; if (ag == \'y\') { goto game; } else (ag == \'n\') ;{ system(\"cls\"); } } system(\"cls\"); cout<<\"___________\"<<endl; cout<<\"YOUR ROBOT:\"<<endl; cout<<\"-----------\"<<endl; cout<<\"lives : \"<<liv<<endl; cout<<\"-money : \"<<mon<<endl; cout<<\"-health: \"<<hel<<endl; cout<<\"-armor : \"<<arm<<endl; cout<<\"-demage: \"<<dem<<endl; cout<<\"_____\\n\"; cout<<\"MENU:\\n\"; cout<<\"-----\\n\"; cout<<\"1. shop (type \'1\')\\n\"; cout<<\"2. fight (type \'2\')\\n\"; cout<<\"3. exit (type \'3\')\\n\"; cout<<\"select: \"; int selectm; cin>>selectm; if (selectm == 1) { shop: system(\"cls\"); cout<<\"_____\\n\"; cout<<\"shop:\\n\"; cout<<\"-----\\n\"; cout<<\"1. chain 50$ (type \'1\')\\n\"; cout<<\"2. railgun 300$ (type \'2\')\\n\"; cout<<\"3. lasergun 700$ (type \'3\')\\n\"; cout<<\"4. exit (type \'4\')\\n\"; cout<<\"select: \\n\"; int selects; cin>>selects; if (selects == 1) { if (mon < 50) { system(\"cls\"); cout<<\"Sorry, but you have not enough money!\\n\"; cin.clear(); cin.get(); cin.get(); goto shop; } else (mon >= 50) ;{ mon = mon - 50; dem = dem + 10; system(\"cls\"); cout<<\"Chain sucessfully buyed!\\n\"; cin.clear(); cin.get(); cin.get(); goto shop; } } if (selects == 2) { if (mon < 300) { system(\"cls\"); cout<<\"Sorry, but you have not enough money!\\n\"; cin.clear(); cin.clear(); cin.get(); goto shop; } else (mon >= 300) ;{ mon = mon - 300; dem = dem + 60; system(\"cls\"); cout<<\"Railgun sucessfully buyed!\\n\"; cin.clear(); cin.get(); cin.get(); goto shop; } } if (selects == 3) { if (mon < 700) { system(\"cls\"); cout<<\"Sorry, but you have not enough money!\\n\"; cin.clear(); cin.clear(); cin.get(); goto shop; } else (mon >= 700) ;{ mon = mon - 300; dem = dem + 140; system(\"cls\"); cout<<\"Lasergun sucessfully buyed!\\n\"; cin.clear(); cin.get(); cin.get(); goto shop; } } if (selects == 4) goto menu; } else if (selectm == 2) { system(\"cls\"); cout<<\"do you really want to fight?\\n\"; cout<<\"(y/n): \\n\"; char selectf; cin>>selectf; if (selectf == \'y\') { system(\"cls\"); cout<<\"Against wich robot do you want to fight?\\n\"; cout<<\"1. Robotn\\n\"; cout<<\"2. Fightrobotn\\n\"; cout<<\"3. Killerrobotn\\n\"; cout<<\"4. Ultrarobotn\\n\"; cout<<\"5. Hellrobotnn\\n\"; int selectr; cin>>selectr; if (selectr == 1) { if (fg < 200) { cout<<\"You\'ve lost!\\n\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 200) ;{ cout<<\"You win!\\n\"; mon = mon + 50; cin.clear(); cin.get(); cin.get(); goto menu; } } else if (selectr == 2) { if (fg < 600) { cout<<\"You\'ve lost!\\n\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 600) ;{ cout<<\"You win!\\n\"; mon = mon + 150; cin.clear(); cin.get(); cin.get(); goto menu; } } else if (selectr == 3) { fg = dem + arm; if (fg < 1000) { cout<<\"You\'ve lost!\\n\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 1000) ;{ cout<<\"You win!\\n\"; mon = mon + 250; cin.clear(); cin.get(); cin.get(); goto menu; } } else if (selectr == 4) { fg = dem + arm; if (fg < 1400) { cout<<\"You\'ve lost!\\n\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 1400) ;{ cout<<\"You win!\\n\"; mon = mon + 350; cin.clear(); cin.get(); cin.get(); goto menu; } } else (selectr == 5) ;{ fg = dem + arm; if (fg < 1800) { cout<<\"You\'ve lost!\\n\"; liv = liv - 1; cin.clear(); cin.get(); cin.get(); goto menu; } else (fg >= 1800) ;{ cout<<\"You win!\\n\"; cin.clear(); cin.get(); cin.get(); mon = mon + 500; goto menu; } } } else if (selectf == \'n\') { goto menu; } } else if (selectm == 3) { quit: system(\"cls\"); cout<<\"do you really want to quit?\\n\"; cout<<\"(y/n): \\n\"; char lev; cin>>lev; if (lev == \'y\') { cin.clear(); } else if (lev == \'n\') { goto menu; } else { cout<<\"only type \'y\' for yes and \'n\' for no!\\n\"; cin.clear(); cin.get(); cin.get(); goto quit; } cin.clear(); } cin.clear(); cin.get(); }
greets
Beitrag geändert: 3.6.2008 18:51:16 von itagame
Beitrag geändert: 3.6.2008 18:52:50 von itagame
Beitrag geändert: 3.6.2008 18:53:11 von itagame -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage