Batch Taschenrechner der Fehler abfängt (Brauche Hilfe!!)
Hallo zum erstenmal
Ich muss einen Batch Taschenrechner, der die Grundrechenarten (+ - * : ) rechnen kann und Fehlereingaben abfängt (Buchstaben, Sonderzeichen und zu große Zahlen) erstellen.
Das mit den Buchstaben und Sonderzeichen funktioniert bis jetzt auch ganz gut bis auf dass " das macht mir noch Probleme...
Ich habe es schon mit einer doppelten FOR-Schleife versucht allerdings führte das nicht zum richtigen Ergebnis, da mir das Programm dann zwar " nichtmehr als Syntaxfehler ausgegeben hat, dafür dann aber meine Rechenarten ein Syntaxfehler waren.
Meine Frage ist jetzt, wie bekomme ich das " "gefiltert" damit mein Taschenrechner nichtmehr Crasht.
Der Code unten, ist nur zum Buchstaben und Sonderzeichen abfangen fähig und nicht mein Kompletter Code, nur ein Ausschnitt davon, der fertige Code wird nach fertigstellung natürlich noch einmal Gepostet, sofern dafür bedarf besteht
Falls nochmehr falsch sein sollte einfach bescheid sagen, nehme jede hilfe sehr sehr gerne an
Mit freundlichen Grüßen
batcherler
Ich muss einen Batch Taschenrechner, der die Grundrechenarten (+ - * : ) rechnen kann und Fehlereingaben abfängt (Buchstaben, Sonderzeichen und zu große Zahlen) erstellen.
Das mit den Buchstaben und Sonderzeichen funktioniert bis jetzt auch ganz gut bis auf dass " das macht mir noch Probleme...
Ich habe es schon mit einer doppelten FOR-Schleife versucht allerdings führte das nicht zum richtigen Ergebnis, da mir das Programm dann zwar " nichtmehr als Syntaxfehler ausgegeben hat, dafür dann aber meine Rechenarten ein Syntaxfehler waren.
Meine Frage ist jetzt, wie bekomme ich das " "gefiltert" damit mein Taschenrechner nichtmehr Crasht.
Der Code unten, ist nur zum Buchstaben und Sonderzeichen abfangen fähig und nicht mein Kompletter Code, nur ein Ausschnitt davon, der fertige Code wird nach fertigstellung natürlich noch einmal Gepostet, sofern dafür bedarf besteht
Falls nochmehr falsch sein sollte einfach bescheid sagen, nehme jede hilfe sehr sehr gerne an
Mit freundlichen Grüßen
batcherler
@echo off
chcp 1252
set ue=ü
set ae=ä
set oe=ö
set ss=ß
set ee=é
set c=©
set pr=»
set pl=«
set az='"
chcp 850
cls
:start
cls
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
echo ± Batch-Taschenrechner ±
echo ±± f%ue%r einfache Mathematische ±±
echo ± Aufgaben (+,-,*,:) ±
echo.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
color 40
title Taschenrechner
echo Was wollen Sie rechnen?
Echo ÚÄ¿ ÚÄ¿ ÚÄ¿ ÚÄ¿
Echo ³+³ oder ³-³ oder ³*³ oder ³:³
Echo ÀÄÙ ÀÄÙ ÀÄÙ ÀÄÙ
Echo Plus Minus Mal Geteilt
echo.
set /p rechenzeichen=^> REM Hier sind (ALT+32) zum Prompt verschieben
FOR /F "tokens=1 delims=+-*:" %%A IN ("%rechenzeichen%") DO (
goto Zeichenfehler
)
if "%rechenzeichen%"=="+" goto Addition
if "%rechenzeichen%"=="-" goto Subtraktion
if "%rechenzeichen%"=="*" goto Multiplikation
if "%rechenzeichen%"==":" goto Division
if "%rechenzeichen%"=="%az%" goto Addition
:Addition
cls
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
echo ± Batch-Taschenrechner ±
echo ±± f%ue%r einfache Mathematische ±±
echo ± Aufgaben (+,-,*,:) ±
echo.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
color 4A
echo. Sie haben "Addition" (Plus) ausgew%ae%hlt.
Echo. ÚÄ¿
Echo. ³+³
Echo. ÀÄÙ
echo Gr%oe%%ss%te, zur Eingabe m%oe%gliche, Zahl = 536870912
echo.
title °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Addition °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
echo.
echo Geben Sie die erste zu berechnende Zahl ein:
echo.
set /p Zahl1=^> REM Hier sind (ALT+32) zum Prompt verschieben
echo.
FOR /F "tokens=1 delims=1234567890" %%A IN ("%Zahl1%") DO (
goto Fehlera
)
IF %Zahl1% GTR 536870912 goto Fehlera
IF %Zahl1% LSS 1 goto Fehlera
echo Geben Sie die zweite zu berechnende Zahl ein:
echo.
set /p Zahl2=^> REM Hier sind (ALT+32) zum Prompt verschieben
echo.
FOR /F "tokens=1 delims=1234567890" %%A IN ("%Zahl2%") DO (
goto Fehlera
)
IF %Zahl2% GTR 536870912 goto Fehlera
IF %Zahl2% LSS 1 goto Fehlera
set /a Zahl3=Zahl1+Zahl2
echo.
echo Das Ergebnis ist:^ ^ ^ ^%pr%%Zahl3%%pl%
echo.
echo.
echo Nach Dr%ue%cken einer beliebigen Taste kommen Sie zur Rechenzeichen Auswahl.
echo.
pause
cls
goto start
:Zeichenfehler
color 4D
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Bitte nur die oben gefragten Zeichen eingeben!!
echo.
Echo. ÚÄ¿
Echo. ³+³
Echo. ÀÄÙ
Echo. ÚÄ¿
Echo. ³-³
Echo. ÀÄÙ
Echo ÚÄ¿
Echo. ³*³
echo. ÀÄÙ
Echo. ÚÄ¿
Echo. ³:³
Echo. ÀÄÙ
echo.
echo.
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
pause
cls
goto start
:Fehlera
color 4D
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Bitte keine Zu Grossen Zahlen "(>536870912)", Buchstaben oder Sonderzeichen eingeben!!
echo.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
echo Versuchen Sie es einfach nochmal.
echo.
pause
cls
goto Addition
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 253753
Url: https://administrator.de/contentid/253753
Ausgedruckt am: 23.11.2024 um 02:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo batcherler, willkommen im Forum.
Wer hat dir denn diesen unsäglichen GOTO Kram beigebracht? Dein
Beispiel:
Beim Aufruf von :check übergibst du 3 Parameter:
Grüße
rubberman
Wer hat dir denn diesen unsäglichen GOTO Kram beigebracht? Dein
goto start
als Schleifenvariante ist ja OK, aber für alles was keine Schleife ist erzeugt GOTO nur Spaghetticode.Ich muss einen Batch Taschenrechner ... erstellen
... klingt nach Schul-/Hausaufgabe, die du eigentlich allein erledigen solltest. Andererseits ist deine Fehlerabfrage nicht gerade trivial. Wenn du alle möglichen Zeichen fehlerfrei verarbeiten willst, dann arbeite an der Stelle mit verzögerter Variablenerweiterung. Die FOR /F Geschichte ist für alles, was nicht 0-9 ist schon OK. Eine Validierung als Zahl kannst du mit SET /A machen. Wenn du den ganzen Test in eine Subroutine packst, brauchst du auch nicht für jede Variable den gleichen Code zu kopieren.Beispiel:
@echo off &setlocal
set "inp="
set /p "inp=> "
call :check inp 1 5
if errorlevel 1 (echo Fehler!) else echo %inp% ist gueltig.
pause
exit /b
:check VarName Min Max
setlocal EnableDelayedExpansion
:: Test auf Ziffern (keine anderen Zeichen erlaubt).
for /f "delims=1234567890" %%i in ("!%~1!") do (endlocal &exit /b 1)
:: Test auf gültige Zahl (alles was SET /A fehlerfrei verarbeiten kann).
2>nul set /a "dummy=!%~1!" || (endlocal &exit /b 1)
:: Test auf Dezimalzahl (keine Oktalzahl durch vorangestellte 0).
if "!%~1!" neq "%dummy%" (endlocal &exit /b 1)
:: Test auf Minimum
if %dummy% lss %~2 (endlocal &exit /b 1)
:: Test auf Maximum
if %dummy% gtr %~3 (endlocal &exit /b 1)
endlocal &set "%~1=%dummy%" &exit /b 0
- den Variablenname (nicht die Variable selbst!)
- den kleinsten erlaubten Wert
- den größten erlaubten Wert
Grüße
rubberman
Hallo batcherler,
wie oben bereits erwähnt, musst du bei der Prüfung mit der verzögerten Variablenerweiterung arbeiten. Auf diese Weise werden Variablen nicht bereits beim Parsen zum Wert expandiert. Das heißt, erst bei der Ausführung der Zeile wird das Anführungszeichen für den Interpreter sichtbar.
Es gilt: Variablenzuweisungen sind sicher mit ausgeschalteter verzögerten Variablenerweiterung, das Arbeiten mit der Variablen ist sicher mit eingeschalteter verzögerten Variablenerweiterung.
Grüße
rubberman
wie oben bereits erwähnt, musst du bei der Prüfung mit der verzögerten Variablenerweiterung arbeiten. Auf diese Weise werden Variablen nicht bereits beim Parsen zum Wert expandiert. Das heißt, erst bei der Ausführung der Zeile wird das Anführungszeichen für den Interpreter sichtbar.
Es gilt: Variablenzuweisungen sind sicher mit ausgeschalteter verzögerten Variablenerweiterung, das Arbeiten mit der Variablen ist sicher mit eingeschalteter verzögerten Variablenerweiterung.
Das mit den "unnötigen" codephrasen ist mir eig relativ egal
Schade.Grüße
rubberman