Batch-Programmierung - Rechnung

PerfectDuude

Newbie
Registriert
Apr. 2019
Beiträge
2
Guten Tag,

ich sitze seit ein paar Stunden an einem kleinen Textadventure und brauche dafür ein Shopsystem.
Zuvor wurde mit einer zufälligen Zahl %y% der Geldbetrag gesetzt.
Jetzt soll nach Einkauf der Preis %a1% abgezogen werden und y neu definiert.
Ich habe es so versucht:
Code:
:Einkauf
set /a y=%y%-%a1%

:: Jetzt soll noch bestimmt werden, ob er sich den gegenstand leisten kann

if %y%-%a1%>0 goto Erf
if %y%-%a1%>0 goto Gesch
Dies scheint aber nicht zu funktionieren.
 
Bei
set /a y = %y%-%a1%
Hast du die Anfangszufallszahl y und ziehst davon a1 ab und legst dann y nach dem abzug neu fest.

Und dann prüfst du nochmal ob das neue y von dem a1 schon abgezogen wurde größer als 0 ist wenn du a1 nochmal abziehst. Du ziehst also a1 doppelt von y ab bei der Überprüfung. Im prinzip müsstest du hingehen und prüfen ob das neue y von dem a1 schon abgezogen wurde größer gleich Null ist.
Also so.
set /a y = %y% - %a1%
if %y% GEQ 0 goto Erf else goto Gesch

Um das mal in Zahlen zu verdeutlichen, sagen wir mal dein Y ist 10 und dein A1 ist 6, dann passiert bei deinem folgendes:

Set /A Y = 10-6
if 4-6 > 0 goto Erf
if 4-6 > 0 goto Gesch

Du hast da ausserdem ein größer verwendet wo ein kleiner hingesollte hätte.
Die letzte Zeile sollte vermutlich so lauten:
if %y%-%a1%<0 goto Gesch
 
Zuletzt bearbeitet:
Auch auf die Gefahr hin dass das blöd ankommt:
Tu dir selbst einen Gefallen und verwende eine richtige Programmiersprache statt eines Batchskripts.

Falls du das nicht willst, beachte, dass du in Batch u.U. erst enableDelayedExpansion setzen musst, wenn du Variablen irgendwo innerhalb von Schleifen o.ä. verwenden willst.
 
  • Gefällt mir
Reaktionen: Raijin und RalphS
Ich rate auch eher zu einer halbwegs vernünftigen Programmiersprache. Insbesondere die von @simpsonsfan angesprochene Problematik mit Schleifen, ist ein pain-in-the-ass, wenn ich das mal so ausdrücken darf. Auch die GOTO-Mechanik von Batch ist problematisch und führt insbesondere bei komplexeren Batch-Dateien nicht selten zu einer hohen Redundanz, weil wiederkehrende "Programm"teile nicht wirklich wiederverwertet werden (können) und daher in duplizierte GOTO-Ketten ausgelagert werden.

Ohne den Rest der Batch-Datei zu kennen, empfehle ich dir wenigstens, dich statt zu sehr auf GOTO zu verlassen auch mal CALL zu nutzen, weil das einer Funktion in einer vollwertigen Programmiersprache am nächsten kommt und redundanten Code minimiert.

Beispiel einer "Funktion" in Batch:

Code:
@echo off

if "%1"=="x" CALL:MESSAGE "Du willst ein x"
if "%1"=="y" CALL:MESSAGE "Du willst ein y"
GOTO:EOF

:MESSAGE
echo %~1
GOTO:EOF
 
Raijin schrieb:
weil wiederkehrende "Programm"teile nicht wirklich wiederverwertet werden (können)
können dürfte falsch sein, da man mit goto problemlos Funktionen abbilden kann.

Andere Programmiersprachen sind einfach nur syntactic shugar (+ Performance)….
 
new Account() schrieb:
da man mit goto problemlos Funktionen abbilden kann
Schon, das war vielleicht zu allgemein formuliert, ja.

Der kleine Code-Ausschnitt lässt auch nur bedingt einschätzen wie der Rest der Batch aussieht. CALL vs GOTO war eher eine Anregung, weil man damit meiner Meinung nach einen aufgeräumteren Batch-Code hinbekommt, der sich mehr an eine Hochsprache anlehnt.
 
  • Gefällt mir
Reaktionen: new Account()
Zurück
Oben