Top-Themen

Aktuelle Themen (A bis Z)

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!!)

Mitglied: batcherler

batcherler (Level 1) - Jetzt verbinden

04.11.2014, aktualisiert 07.11.2014, 1038 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 ..
Ähnliche Inhalte
Batch & Shell
Brauche Hilfe bei einem Batch
gelöst Frage von karla123Batch & Shell8 Kommentare

Liebes Forum, kann mir bitte wer helfen? Folgendes Problem: Ich möchte einen bestimmten Ordner der in mehreren Unterordnen vorkommt ...

Outlook & Mail
Ich brauche Hilfe
Frage von Delta1Outlook & Mail8 Kommentare

User der über Terminalserver arbeitet hat folgendes Problem beim Outlook Email schreiben: Es läuft so ab, dass der User ...

Batch & Shell

Brauche Hilfe mit einem Batch Script( or condition)

Frage von fireskyerBatch & Shell21 Kommentare

Hallo Ich habe ne Frage bezüglich einem Batch Script: Das Script soll ein Programm Killen und dann abfragen, wo ...

Sonstige Systeme

Brauche Hilfe, Thema: Steuererklärung

Frage von teslacoilSonstige Systeme8 Kommentare

Hallo an alle, Ich besitze eine kleine IT Firma und habe keinen Steuerberater,mache alles selber, jetzt brauche ich mehr ...

Neue Wissensbeiträge
Windows 10

Neue Sicherheitslücke in Windows 10 (Version 1709) durch Google öffentlich geworden

Information von kgborn vor 13 StundenWindows 10

Vor ein paar Tagen haben Googles Sicherheitsforscher vom Projekt Zero eine Sicherheitslücke im Edge-Browser publiziert. Jetzt wurde eine weitere ...

iOS
IOS 11.2.6 verfügbar
Information von sabines vor 18 StundeniOS

Mit dem Update soll der Bug behoben werden, bei dem eine bestimmte Zeichenkette IOS zum Absturz gebracht hat.

Sicherheit
Sicherheitsrisiko: Die Krux mit 7-Zip
Information von kgborn vor 1 TagSicherheit8 Kommentare

Bei vielen Anwendern ist das Tool 7-Zip zum Entpacken von Archivdateien im Einsatz. Die Software ist kostenlos und steht ...

Internet

Datendealing im WWW Tracking Methoden immer brutaler

Information von sabines vor 1 TagInternet

Interessanter Artikel zum Thema Tracking im WWW und die immer "besseren" Methoden des Trackings. Professor Arvind Narayanan (Princeton-Universität) betreibt ...

Heiß diskutierte Inhalte
Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server25 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

LAN, WAN, Wireless
VPN Cisco ASA5505 PaloAlto PA-200
gelöst Frage von YannoschLAN, WAN, Wireless22 Kommentare

Hallo zusammen, ich würde gerne ein Site-to-Site VPN zwischen den beiden Standorten aufbauen. PaloAlto PA200 Internetanschluss Deutsche Telekom GK ...

SAN, NAS, DAS
Qnap TS-453S Pro - Anbindung Active Directory
Frage von JuckieSAN, NAS, DAS13 Kommentare

Hallo zusammen, ich habe hier eine Qnap TS-453S Pro die sich mal so absolut gar nicht in das Active ...