title image


Smiley Re: Nachtrag mit Lösung die funktioniert
Hi,ganz einfach.Mit der Zeile elsif ($operator eq "/") {$berechnung=$x / $y;} berechnest Du ja schon das Ergebnis, ohne vorher $x oder $y auf Gültigkeit geprüft zu haben.$y kann also 0 sein, was dann bereits bei der Ausführung auffällt und das Programm vorzeitig beendet.Dein Kommentar "# Umwandlung der Eingabe in Formel" ist so nicht ganz korrekt. Er wandelt nichts in eine Formel um, sondern er berrechnet sofort und $berechnung enthaelt dann das Ergebnis.Du musst also, wie Du es im 2. Skript getan hast, die Benutzereingaben prüfen bevor Du mit Ihnen arbeitest.Besser wäre zum Beispiel eine Subroutine, die Du verwendest, um direkt bei der Benutzereingabe die Gültigkeit der Zeichen zu prüfen; das mag vielleicht momentan noch zu weit gegriffen sein; aber bei komplexeren Sachen sollte man daran denken:�1 #!/usr/bin/perl -w�2 use strict;������������������������ # immer verwenden�3 �4 �5 # forumsbeitrag: http://spotlight.de/zforen/prl/m/prl-1202671284-5996.html�6 �7 �8 �9 ### DEFINITION SUB ROUTINEN10 ###############################################################################11 12 # input = get_input( 'message text', testing regex, optional string )13 # message text: Ausgabe Text fuer den Benutzer14 # testing regex: Regulaerer Ausdruck zum Pruefen der Eingabe15 # optional string: zusaetzliches Kriterium fuer besondere Bedingungen16 # input: Rueckgabewert: die Eingabe vom Benutzer17 sub�get_input {18 ����my�$message��= shift;������# Aufforderung an den Benutzer19 ����my�$regex����= shift;������# Regex zur Pruefung der Eingabe20 ����my�$optional�= shift�|| '';����# wenn nix (oder 0) gegeben, setze Leerstring21 22 ����my�$input;23 24 ����LOOP:25 ����do�{26 ��������print�$message;27 ��������chomp( $input�= �);28 ����} while�( $input�!~ m/$regex/�);29 30 ����# springe zurueck zur Eingabeaufforderung, wenn $input noch nicht OK ist31 ����# haengt von der Optionalen Bedingung ab32 ����if�( $optional�eq�'not null'�and�$input�== 0�) {33 34 ��������print�"Hier darf keine Null eingeben werden!\n";35 ��������# goto find ich eigentlich boese und meide es36 ��������# aber hier finde es mal ganz praktisch;37 ��������# Verbesserungsvorschlaege erwuenscht38 ��������goto�LOOP;����������������39 ����}40 ����41 ����return�$input;42 }43 44 45 ### HAUPTPROGRAMM46 ###############################################################################47 48 # erste Zahl abfragen und gegen Regex pruefen49 my�$x��= get_input( 50 ����"Bitte geben Sie eine Zahl ein: ",������������ # Text51 ����qr/^\d+\z/������������������������������������ # Regex52 );53 54 # Operator abfragen und gegen Regex (Zeichengruppe +-*/) pruefen55 my�$op�= get_input( 56 ����"Bitte geben Sie die Rechenoperation ein (+-*/) ein: ",����# Text57 ����qr{^[-+*/]\z}������������������������������������������# Regex58 );59 60 # zweite Zahl abfragen und gegen Regex pruefen; 61 # wenn $op '/' enthaelt; darf die Eingabe nicht 0 sein; 62 # ansonsten ist es uns egal, daher der Leerstring63 my�$y��= get_input( 64 ����"Bitte geben Sie eine weitere Zahl ein: ",���� # Text65 ����qr/^\d+\z/,����������������������������������������# Regex66 ����$op�eq�'/'�? 'not null'�: '',������������������# Optional; wenn $op '/' enthaelt67 );68 69 70 # Berechnungen71 my�$ergebnis�= undef;72 if����( $op�eq�"+") { $ergebnis�= $x�+ $y; }73 elsif�( $op�eq�"-") { $ergebnis�= $x�- $y; }74 elsif�( $op�eq�"*") { $ergebnis�= $x�* $y; }75 elsif�( $op�eq�"/") { $ergebnis�= $x�/ $y; }76 77 print�"$x�$op�$y�= $ergebnis\n";Listing: division0a.plDate: 2008 Feb 11 02:24:40Ich hoffe, mit meinem späten und müden Code-Erguss nicht zu sehr zu verwirren ;)GreetzLinuxer



Wann werden endlich wieder brauchbare Fehlermeldungen Mode?


Alle Angaben ohne Gewähr und auf eine Linux-Umgebung abgestimmt!


Woran liegt es, dass ein Danke oftmals schwerer geschrieben ist als eine bei weitem längere Frage?


http://perldoc.perl.orghttp://search.cpan.orghttp://httpd.apache.orghttp://www.oreillynet.com/linux/cmd/



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: