batcherler
Goto Top

Batch Taschenrechner der Fehler abfängt (Brauche Hilfe!!)

Hallo zum erstenmal face-smile

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... face-plain

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 face-smile

Falls nochmehr falsch sein sollte einfach bescheid sagen, nehme jede hilfe sehr sehr gerne an face-smile

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

Content-ID: 253753

Url: https://administrator.de/contentid/253753

Ausgedruckt am: 23.11.2024 um 02:11 Uhr

rubberman
Lösung rubberman 04.11.2014, aktualisiert am 07.11.2014 um 11:14:58 Uhr
Goto Top
Hallo batcherler, willkommen im Forum.

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  
Beim Aufruf von :check übergibst du 3 Parameter:
  • den Variablenname (nicht die Variable selbst!)
  • den kleinsten erlaubten Wert
  • den größten erlaubten Wert

Grüße
rubberman
batcherler
batcherler 06.11.2014 um 15:56:02 Uhr
Goto Top
Hallo,
erstmal danke für diese sehr hilfsreiche Antwort. face-smile

Allerdings brauche ich nur die Lösung dafür, wie ich es hinbekomme das mein Taschenrechner einfach nichtmehr crasht wenn ich ein " eingebe, der rest funktioniert ja auch wenns ziemlich wirrwarr ist :P

Das mit den "unnötigen" codephrasen ist mir eig relativ egal, da ich das schon als o.k. "abgestempelt" bekommen habe.
Nurnoch das " wird bemängelt daher ist eben meine Frage wie ich das hinbekomme.

MfG
batcherler
rubberman
rubberman 07.11.2014 um 00:11:04 Uhr
Goto Top
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.

Das mit den "unnötigen" codephrasen ist mir eig relativ egal
Schade.

Grüße
rubberman