Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

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

Frage Entwicklung Batch & Shell

Mitglied: batcherler

batcherler (Level 1) - Jetzt verbinden

04.11.2014, aktualisiert 07.11.2014, 969 Aufrufe, 3 Kommentare

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

01.
@echo off 
02.
chcp 1252 
03.
set ue=ü 
04.
set ae=ä 
05.
set oe=ö 
06.
set ss=ß 
07.
set ee=é 
08.
set c=© 
09.
set pr=» 
10.
set pl=« 
11.
set az='" 
12.
chcp 850 
13.
cls 
14.
 
15.
 
16.
 
17.
:start 
18.
cls 
19.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° 
20.
echo                                     ±      Batch-Taschenrechner    ± 
21.
echo                                    ±±  f%ue%r einfache Mathematische  ±± 
22.
echo                                     ±      Aufgaben (+,-,*,:)      ± 
23.
echo. 
24.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° 
25.
color 40 
26.
title Taschenrechner 
27.
echo                                  Was wollen Sie rechnen? 
28.
Echo                            ÚÄ¿        ÚÄ¿        ÚÄ¿        ÚÄ¿ 
29.
Echo                            ³+³  oder  ³-³  oder  ³*³  oder  ³:³ 
30.
Echo                            ÀÄÙ        ÀÄÙ        ÀÄÙ        ÀÄÙ 
31.
Echo                            Plus      Minus       Mal      Geteilt 
32.
echo. 
33.
set /p rechenzeichen=^>                                            REM Hier sind (ALT+32) zum Prompt verschieben 
34.
FOR /F "tokens=1 delims=+-*:" %%A IN ("%rechenzeichen%") DO ( 
35.
goto Zeichenfehler 
36.
37.
 
38.
 
39.
 
40.
if "%rechenzeichen%"=="+" goto Addition 
41.
if "%rechenzeichen%"=="-" goto Subtraktion 
42.
if "%rechenzeichen%"=="*" goto Multiplikation 
43.
if "%rechenzeichen%"==":" goto Division 
44.
if "%rechenzeichen%"=="%az%" goto Addition 
45.
 
46.
 
47.
 
48.
:Addition 
49.
cls 
50.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° 
51.
echo                                     ±      Batch-Taschenrechner    ± 
52.
echo                                    ±±  f%ue%r einfache Mathematische  ±± 
53.
echo                                     ±      Aufgaben (+,-,*,:)      ± 
54.
echo. 
55.
echo °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° 
56.
color 4A 
57.
echo.                                 Sie haben "Addition" (Plus) ausgew%ae%hlt. 
58.
Echo.                           ÚÄ¿  
59.
Echo.                           ³+³  
60.
Echo.                           ÀÄÙ 
61.
echo                            Gr%oe%%ss%te, zur Eingabe m%oe%gliche, Zahl = 536870912  
62.
echo. 
63.
title °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Addition °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° 
64.
echo. 
65.
echo                            Geben Sie die erste zu berechnende Zahl ein: 
66.
echo. 
67.
set /p Zahl1=^>                                               REM Hier sind (ALT+32) zum Prompt verschieben 
68.
echo. 
69.
FOR /F "tokens=1 delims=1234567890" %%A IN ("%Zahl1%") DO (  
70.
goto Fehlera 
71.
)  
72.
IF %Zahl1% GTR 536870912 goto Fehlera 
73.
IF %Zahl1% LSS 1 goto Fehlera 
74.
echo                            Geben Sie die zweite zu berechnende Zahl ein: 
75.
echo. 
76.
set /p Zahl2=^>                                               REM Hier sind (ALT+32) zum Prompt verschieben 
77.
echo. 
78.
FOR /F "tokens=1 delims=1234567890" %%A IN ("%Zahl2%") DO ( 
79.
goto Fehlera 
80.
81.
IF %Zahl2% GTR 536870912 goto Fehlera 
82.
IF %Zahl2% LSS 1 goto Fehlera 
83.
set /a Zahl3=Zahl1+Zahl2 
84.
echo. 
85.
echo                            Das Ergebnis ist:^ ^ ^ ^%pr%%Zahl3%%pl% 
86.
echo. 
87.
echo. 
88.
echo                            Nach Dr%ue%cken einer beliebigen Taste kommen Sie zur Rechenzeichen Auswahl. 
89.
echo. 
90.
pause 
91.
cls 
92.
goto start 
93.
 
94.
 
95.
 
96.
:Zeichenfehler 
97.
color 4D 
98.
echo. 
99.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
100.
echo                            Bitte nur die oben gefragten Zeichen eingeben!! 
101.
echo.              
102.
Echo.                           ÚÄ¿       
103.
Echo.                           ³+³        
104.
Echo.                           ÀÄÙ      
105.
Echo.                           ÚÄ¿     
106.
Echo.                           ³-³     
107.
Echo.                           ÀÄÙ   
108.
Echo                            ÚÄ¿   
109.
Echo.                           ³*³    
110.
echo.                           ÀÄÙ       
111.
Echo.                           ÚÄ¿    
112.
Echo.                           ³:³      
113.
Echo.                           ÀÄÙ    
114.
echo.                                     
115.
echo.                                                
116.
echo. 
117.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
118.
pause 
119.
cls 
120.
goto start 
121.
 
122.
 
123.
 
124.
:Fehlera 
125.
color 4D 
126.
echo. 
127.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
128.
echo                 Bitte keine Zu Grossen Zahlen "(>536870912)", Buchstaben oder Sonderzeichen eingeben!! 
129.
echo. 
130.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
131.
echo                                      Versuchen Sie es einfach nochmal. 
132.
echo. 
133.
pause 
134.
cls 
135.
goto Addition
Mitglied: rubberman
LÖSUNG 04.11.2014, aktualisiert 07.11.2014
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:
01.
@echo off &setlocal 
02.
 
03.
set "inp=" 
04.
set /p "inp=> " 
05.
 
06.
call :check inp 1 5 
07.
if errorlevel 1 (echo Fehler!) else echo %inp% ist gueltig. 
08.
 
09.
pause 
10.
exit /b 
11.
 
12.
 
13.
:check VarName Min Max 
14.
setlocal EnableDelayedExpansion 
15.
:: Test auf Ziffern (keine anderen Zeichen erlaubt). 
16.
for /f "delims=1234567890" %%i in ("!%~1!") do (endlocal &exit /b 1) 
17.
:: Test auf gültige Zahl (alles was SET /A fehlerfrei verarbeiten kann). 
18.
2>nul set /a "dummy=!%~1!" || (endlocal &exit /b 1) 
19.
:: Test auf Dezimalzahl (keine Oktalzahl durch vorangestellte 0). 
20.
if "!%~1!" neq "%dummy%" (endlocal &exit /b 1) 
21.
:: Test auf Minimum 
22.
if %dummy% lss %~2 (endlocal &exit /b 1) 
23.
:: Test auf Maximum 
24.
if %dummy% gtr %~3 (endlocal &exit /b 1) 
25.
 
26.
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
Bitte warten ..
Mitglied: batcherler
06.11.2014 um 15:56 Uhr
Hallo,
erstmal danke für diese sehr hilfsreiche Antwort.

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
Bitte warten ..
Mitglied: rubberman
07.11.2014 um 00:11 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Splitten in Batch. Wo liegt der Fehler!? (4)

Frage von Todybear zum Thema Batch & Shell ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (3)

Frage von Matzus87 zum Thema Batch & Shell ...

Batch & Shell
Batch-Variable nach Stichworten aus TXT Datei durchsuchen (3)

Frage von Markus5579 zum Thema Batch & Shell ...

Windows Server
gelöst BackupExec 2016 Fehler beim Backup von Windows 2016 (1)

Frage von Looser27 zum Thema Windows Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...