Logikproblem mit Schleife
-
Hallo, habe ein ziemlich triviales Problem, komme aber zur Zeit nicht auf die Lösung. Es gibt die Funktion:
bool update()
{
.........
}Auf diese wird öfter zugegriffen.
Jetzt möchte ich in dieser Funktion, nur wenn sie das ERSTE mal aufgerufen wird an einer bestimmten Stelle etwas ausrechnen, und bei den nächsten Zugriffen soll er über diese Stelle einfach hinweg gehen.
Hatte zuerst an eine for-Schleife gedacht.
for (int i = 0; i < 1 ; i++)
{ Rechnung ... }Aber das ist ja doof, weil der geht dann trotzdem jedes Mal in diese Schleife rein, weil ich am Anfang i immer = 0 intialisiere.
Dann dachte ich an bool, also
bool Rechnung = true;
if (Rechnung = true)
{ Rechnung
Rechnung = false;
}Aber auch wieder Schwachsinn, weil ich bei jedem Zugriff dieser Funktion wieder Rechnung auf true setze, also er somit logischerweise wieder da rein springt.
Hilfe, ich bin dumm, bitte helft mir

-
Guck dir mal an, was das Schlüsselwort 'static' bewirkt. Das ist mindestens für deine bool Variable das richtige. Je nach Umfang kannst du damit vielleicht auch gleich die ganze Rechnung nur einmal ausführen, ohne das Hilfskonstrukt mit dem bool.
edit: War vielleicht ein schlechter Tipp für einen Anfänger, da static sehr viele Bedeutungen haben kann, deshalb eine kurze Erklärung:
static Variablen bleiben über Funktionsaufrufe hinweg erhalten.
void foo(){ static int bar = 0; // Wird nur beim ersten Aufruf ausgeführt cout << bar << endl; ++bar; } int main(){ foo(); // 0 foo(); // 1 foo(); // 2 }
-
wieso denkst du denn so etwas zu brauchen?
bool update() { /*...*/ } //aufruf: for(int i = 0; i != 4567; i++) { static bool updt = update(); /*...*/ }aber das hier hört sich gerade so an, als ob es einfacher gehen würde, wenn du sagen möchtest, was du möchtest und nicht, wie du denkst, etwas lösen zu müssen^^
bb
-
Hallo, schonmal vielen Dank!
Ich will nur ganz am Anfang einen bestimmten Abstand errechnen. Danach soll er nicht mehr auf diese "Funktionen" zugreifen.
int Schicht = 0; static label Zustand = 0; if (Zustand == 0) { int AusGZD = virtualPistonPosition() - pistonPosition(); cout << "AusGZD = " << AusGZD << endl; double VirtualPoint = (deckHeight()-AusGZD); cout << "VirtualPoint = " << VirtualPoint << endl; double NewVirtualPoint = VirtualPoint + deltaZ * (deckHeight() -VirtualPoint )/(deckHeight() - pistonPosition()); cout << "NewVirtualPoint = "<< NewVirtualPoint << endl; Schicht = deltaZ/(VirtualPoint*(NewVirtualPoint/VirtualPoint-1)); cout << "Schicht = "<< Schicht << endl; Zustand++; }So habe ich das im Moment, schon mit der static Deklaration. Heißt das jetzt beim nächsten Mal ist Zustand != 0 ? Das wäre ja sehr gut, genau das was ich suche, wäre ich im Leben nicht mehr drauf gekommen. C++ ist schon eine Weile her.
Was hat es genau mit dem static auf sich, wieso ignoriert er beim zweiten Mal die Deklaration von Zustand ?Danke übrigens
-
-
er ignoriert die (erneute) initialisierung von zustand (mit 0)...
weil static eben static ist - es ist wie eine (versteckte) globale variable...
lies mal in dem buch deiner wahl nach oder im internet, wenn dir das nicht reicht: die lebenszeit der variable endet eben nicht mit dem scope-ende sodern erst beim programmende...bb
-
Alles klar, das war mal schnelle und zuverlässige Hilfe !
Danke euch