PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : String-Problemchen



poet
20-08-2002, 07:47
Im folgenden Script wird durch eine IF-Schleife die Eingabe von Strings und zahlen >= 10 abgefangen. Die einstellige Zahl wird Buchstabiert, sprich aus der Eingabe von 9 wird 'neun'.

Ich verstehe den fett-martkierten Codeteil nicht.
Wie soll man denn einen String namens 0 eingeben? Die Eingabe von 0 ist doch kein String. Könnte mir jemanden den IF-Teil sauber erklären bitte?




5: $num = 0; # Zahl
6: $exit = ""; # Programm verlassen? j oder n.
7:
8: while ($exit ne "n") {
9:
10: while () {
11: print 'Geben Sie die zu buchstabierende Zahl ein: ';
12: chomp($num = <STDIN>);
13: if ($num ne "0" && $num == 0) { # wenn $num ein String
14: print "Keine Strings. Eine Zahl von 0 bis 9 bitte.\n";
15: next;
16: }
17: if ($num > 9) { # wenn $num mehrstellige Zahl
18: print "Zu hoch. 0 bis 9 bitte.\n";
19: next;
20: }
21: if ($num < 0) { # wenn $num negative Zahl
22: print "Keine negativen Zahlen. 0 bis 9 bitte.\n";
23: next;
24: }
25: last;
26: }
27:
28: print "$num ist ";
29: if ($num == 1) { print 'eins'; }
30: elsif ($num == 2) { print 'zwei'; }
31: elsif ($num == 3) { print 'drei'; }
32: elsif ($num == 4) { print 'vier'; }
33: elsif ($num == 5) { print 'fuenf'; }
34: elsif ($num == 6) { print 'sechs'; }
35: elsif ($num == 7) { print 'sieben'; }
36: elsif ($num == 8) { print 'acht'; }
37: elsif ($num == 9) { print 'neun'; }
38: elsif ($num == 0) { print 'null'; }
39: print "\n";
40:
41: while () {
42: print 'Eine weitere Zahl versuchen (j/n)?: ';
43: chomp ($exit = <STDIN>);
44: $exit = lc $exit;
45: if ($exit ne 'j' && $exit ne 'n') {
46: print "j oder n bitte.\n";
47: }
48: else { last; }
49: }
50: }

ponzellus
22-08-2002, 18:49
hi

welchen teil meinst du, hier ist nichts fett markiert?
ich denke mal

13: if ($num ne "0" && $num == 0) { # wenn $num ein String
14: print "Keine Strings. Eine Zahl von 0 bis 9 bitte.\n";
15: next;
16: }

Wie soll man denn einen String namens 0 eingeben? Die Eingabe von 0 ist doch kein String.Das ist nicht ganz richtig. variablen in perl sind ja nicht typisiert, dass heisst, 0 kann sowohl als zahl als auch als string ausgewertet werden. wenn du zum beispiel in zeile 13 nur " if ($num eq "0") { " schreiben würdest, käme bei jeder eingabe von 0 die fehlermeldung, dass keine strings eingegeben werden sollen...

Könnte mir jemanden den IF-Teil sauber erklären bitte? hier wird zuerst geprüft, ob $num als string ungleich 0 ist, wenn ja, dann wird geprüft, ob $num als zahl keinen wert hat ( der wert ist dann gleich null ). wenn diese beiden angaben true sind, wird in den if-block dazu gesprungen -- wobei die prüfung $num == 0 meiner meinung nach überflüssig ist..

ich hoffe, das war einigermassen verständlich und hat dir geholfen :)

MfG ponzellus