Thread Hashvergleich klappt nicht *war Anfänger Frage (10 answers)
Opened by der_thomas at 2013-09-22 18:11

der_thomas
 2013-09-22 18:11
#170496 #170496
User since
2013-09-07
158 Artikel
BenutzerIn
[default_avatar]
Es ist mir echt etwas peinlich das hier überhaupt reinzusetzen, aber momentan stehe ich etwas auf dem Schlauch...
Der Code unten funktioniert nicht so wie er soll:
- Der else Zweig in Zeile 15 wird nie abgearbeitet.
- Wenn man z.b. "antwort auf 2" eingibt wird das nie erkannt
- Gibt man gleich nach dem Programmstart einen falschen (nicht existierenden) Schlüssel ein wird das Programm immer und ohne Fehlermeldung beendet.
- Gibt man zuerst einen richtigen Schlüssel ein, dann aber später einen falschen ein z.B. "ffffff" - dann wird das Programm manchmal ohne Fehlermeldung beendet, aber nicht immer, meist wird nur die Sub "datensuchen" wieder aufgerufen (1 von 5 mal bricht das Programm ab).
- Drückt man nur Enter wird meist 2-3 mal auch erst wieder die sub 'datensuchen' aufgerufen bevor das Programm beendet wird, manchmal wird das Programm aber auch, so wie gewollt, sofort beendet.

Das alles passiert sehr unregelmässig und ist deshalb für mich nicht nachvollziehbar - außer dem else Zweig, der, egal was man eingibt nie aufgerufen wird und der Programmabbruch wenn gleich zu Anfang ein nicht existierender Schlüssel eingegeben wird.

Das einzige was zuverlässig funktioniert ist dass auf "1.eintrag" und 2. eintrag" immer die richtige Antwortphrase kommt.

Getestet habe ich es mit Perl 5.18 auf Win7 und mit Perl 5.14 auf einem aktuellen Lubuntu (12 oder 13.x glaube ich)
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/usr/bin/perl

use v5.12;

our %daten;


sub datensuchen{
print "\nLink suchen (Enter = Beenden)\n";
my $notiz = <STDIN>;
if ($notiz == "\n" or $notiz == ""){
return};
if (exists $daten{$notiz}){
print "\n$daten{$notiz}\n";datensuchen();}
else {
print "\nNicht gefunden !!\n";datensuchen();}
datensuchen();
}

sub datenladen{
open my $FH, '<', 'links.txt';
my @liste = <$FH>;
close $FH;
for ($_= 0; $_<=$#liste;$_+=2){
$daten{$liste[$_]} = $liste[$_+1];
$daten{$liste[$_+1]} = $liste[$_];
}
}

# main
datenladen();
datensuchen();


Der Inhalt der links.txt Datei ist folgender:
1.eintrag
antwort auf 1
2. eintrag
antwort auf 2

modedit Editiert von GwenDragon: Titel geändert
Last edited: 2013-09-23 10:14:23 +0200 (CEST)

View full thread Hashvergleich klappt nicht *war Anfänger Frage