11.05.2012, 21:29 | #1 (permalink) |
Registriert seit: 26.12.2008
Beiträge: 25
|
If-Condition in While-Schleife
Hallo
Ich bin hier grade ziemlich am verzweifeln, zumal ich beim besten Willen einfach nicht herausfinden kann, was ArmA an dem Script grade nicht passt. Code:
hint "init.sqf is working..."; sleep 3; _zahl = 0; hint format ["Zahl: %1", _zahl]; while {true} do { _zahl = _zahl + 1; hint format ["Zahl: %1", _zahl]; sleep 1; if (_zahl >= 25) then { exitWith{} }; }; hint "Exited Loop :D"; sleep 2; hint ""; Meiner Meinung nach sollte mit dem Script ein Timer bis 25 zählen, und dann die While-Schleife verlassen. So wie ich das sehe is die Syntax auch korrekt. Aber anscheinend is er irgendwie nicht zufrieden mit der If-Abfrage in der While-Schleife. Das Script läuft dann zwar, allerdings wird die While-Schleife nie ausgeführt, d.h. Zahl: 1, Zahl: 2 etc bekomme ich einfach garnicht zusehen... Ich weiß, dass ich die Bedingung zum verlassen auch gleich in die While-Bedingung schreiben könnte, aber mir gehts hier eben explizit darum, die Schleife mit exitWith{} zu verlassen. Ne Idee warum das oben nicht geht? lg |
11.05.2012, 22:31 | #2 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 52
Beiträge: 1.930
|
Code:
if (_zahl >= 25) exitWith {}; Ich bezweifel allerdings, dass damit Deine WHILE Schleife damit beendet wird. Um das zu bewerkstelligen solltest Du Dir das hier anschauen... |
11.05.2012, 22:34 | #3 (permalink) |
Registriert seit: 26.12.2008
Beiträge: 25
|
Danke erstmal
Ist meine if-Abfrage denn wirklich falsch? Immerhin wird sie in der BISTUDIO-Wiki ebenfalls folgendermaßen aufgeführt: Code:
if (CONDITION) then { STATEMENT; ... }; lg |
11.05.2012, 23:01 | #4 (permalink) |
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
|
Es gibt nach den if entweder nen then oder ein exitwith.
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547 |
18.05.2012, 23:14 | #8 (permalink) |
Registriert seit: 26.11.2006
Ort: Kiel, S-H
Alter: 57
Beiträge: 3.013
|
Grüße zurück Exitwith ist sehr nützlich weil es nämlich nur den aktuellen Loop abbricht, erst auf der untersten Ebene des Scripts wird es gezielt das Script beenden und das eben mit den nachfolgenden Scriptteilen. PHP-Code:
__________________
Nur ein Beispiel das zeigt wie BI "support" definiert: https://feedback.bistudio.com/T75547 |
19.05.2012, 15:05 | #13 (permalink) |
Code:
y = false z = 0 #loop ~0.1 z = z + 1 ?(z>3) : y = true ?(y) : goto "raushier" goto "loop" #raushier exit *wenn man das sieht wird einem ganz schlecht!* Grüße
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
20.05.2012, 01:56 | #15 (permalink) |
Ja natürlich gibt’s auch andere Möglichkeiten war ja in Grunde auch nur ein Beispiel von mir, aber bevor der eine oder andere, hier nur sinnlosen Sachen postet, und es in grunde kein Facebook hier ist könntet ihr ja auch einen code posten!
Ich stelle das If (true) exitWith {}; am Schluss, des scripts, da ich mir sicherer bin, wenn ich es öfter aufrufe das es auch richtig beendet wird! (Das bleibt in grunde wohl jeden selbst überlassen!) soll aber jetzt nicht böse gemeind sein!
__________________
Ghost_AUT Geändert von Ghost_Aut (20.05.2012 um 02:04 Uhr). |
|
20.05.2012, 02:08 | #16 (permalink) |
Registriert seit: 31.03.2003
Beiträge: 2.533
|
Naja aber wir haben ja grad gelernt dass das exitWith ein break aus einem scope is. Dein if da unten ist in keinem scope mehr, daher ist es sinnfrei dort zu versuchen rauszuspringen.
Meckert die Engine nicht wenn sowas ausgeführt wird? |
20.05.2012, 02:26 | #17 (permalink) |
Bei diesen Beispiel ist es sinnlos ist schon richtig da
Code:
if (_zahl >= 25) exitWith {hintc "Script Akt. zeile"}; Schon diese Zeile am Schluss reicht! Wenn: Code:
If (_zahl >= 25) then {hintc "Script Akt. zeile"}; Code:
//Dann wer diese Zeile sinnvoller! If (true) exitWith {}; Aber war auch in Endeffekt mal schnell hier rein geschrieben, der obere code!
__________________
Ghost_AUT Geändert von Ghost_Aut (20.05.2012 um 02:30 Uhr). |
|
20.05.2012, 02:39 | #18 (permalink) |
Also in Großen und ganzen meine ich es so!
Code:
private ["_zahl"]; _zahl = 0; while {_zahl <= 24} do { _zahl=_zahl + 1; hint format ["Zahl: %1", _zahl]; sleep 1; }; if (_zahl >= 25) exitWith {hint "script code}; Code:
private ["_zahl"]; _zahl = 0; while {_zahl <= 24} do { _zahl=_zahl + 1; hint format ["Zahl: %1", _zahl]; sleep 1; }; if (_zahl >= 25) then {hint "scripr code}; if (true) exitWith {};
__________________
Ghost_AUT |
|
20.05.2012, 11:29 | #19 (permalink) |
Registriert seit: 31.03.2003
Beiträge: 2.533
|
Deine Verwendung da unten is falsch. Möglicherweise macht sich die Engine nichts draus, aber das macht den Fehler nicht minder.
Ich erklärs nochmal kurz: es gibt schleifen² und das switch³ und diese haben ein sogenanntes scope indem du den code einschließt der ausgefühlt werden soll wenn die Eingangsbedingung wahr ist. Es gibt nun 2 möglichkeiten dieses scope zu verlassen:
Anmerkung: ² count und forEach sind auch schleifen wenn ich das richtig sehe ³ switch is equivalent zu if + else if verkettetem statement Ich hoffe ich konnte helfen |
20.05.2012, 16:48 | #20 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Woran erkennt man durch diese Zeile ob ein Skript richtig beendet wurde? Wenn du beim Testen wissen willst ob ein Skript beendet wurde, dann reicht doch als letzte Zeile eine Textausgabe wie z.B. hint "Skript ende!" ohne Strichpunkt am Zeilenende. |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|