Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]10095[/thread]

$zeichen = "+" in einer Rechnung verwenden. (Seite 2)

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
pl
 2007-08-17 01:05
#98300 #98300
User since
2007-06-05
26 Artikel
BenutzerIn
[default_avatar]
Ich komm einfach nicht zu der Lösung des Problems. Seit ewigkeiten gibt mir mein Programm die selbe Fehlermeldung aus:
Code: (dl )
1
2
3
4
Can't use string ("") as a subroutine ref while "strict refs" in use at /home/jakob/pl l
ine 98, <STDIN> line 4.

Shell beendet 255


Deshalb hab ich mal den wichtigen Teil rausgenommen, vielleicht könnt ihr mir ja helfen :(, die Zeile 98 habe ich in meinem Code 'markiert'.
(Ich hoffe ihr könnt durchblick bewahren).

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
33
34
35
36
use strict;
use warnings;

print "Kannst du schon Minusrechnen?\n";
my $ja_nein = <STDIN>;

if ($ja_nein =~ /ja/i) {
$rechenfaehigkeit++;
....
} else {
...

my %rechenart = (
'+' => sub { $_[0] + $_[1] },
'-' => sub { $_[0] - $_[1] },
'*' => sub { $_[0] * $_[1] },
'/' => sub { $_[0] / $_[1] },
'**' => sub { $_[0] ** $_[1] },
);

my @zeichen = qw# + - * / ** #;
my $anzahl_der_zeichen = @zeichen;

....

while (1) {
my $zahl1 = sprintf '%d', (int(rand($rechenfaehigkeit +1)));
my $zahl2 = sprintf '%d', (int(rand($rechenfaehigkeit +1)));

my $arrayindizies = ((int(rand( $anzahl_der_zeichen +1 ))) -1);
my $welches_zeichen = $zeichen[$arrayindizies];
[b]Das ist die Zeile 98!!![/b] my $ergebnis = $rechenart{$welches_zeichen}->($zahl1, $zahl2);

....

}


Danke im Vorraus,
Pl.
Ronnie
 2007-08-17 03:38
#98302 #98302
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Gib doch direkt vor der Zeile mal $welches_zeichen mit print aus. So wie es aussieht ist die Variable zu diesem Zeitpunkt leer. Dann kannst du schrittweise zurückverfolgen welcher deiner vorhergehenden Schritte das Problem verursacht.
Taulmarill
 2007-08-17 13:11
#98306 #98306
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Noch ein Tip: wenn du einfach nur ein (pseudo)zufälliges Element eines Arrays haben willst, kannst du das relativ sicher so machen
Code (perl): (dl )
my $welches_zeichen = $zeichen[ rand @zeichen ];
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
pl
 2007-08-17 16:49
#98329 #98329
User since
2007-06-05
26 Artikel
BenutzerIn
[default_avatar]
Danke, jetzt geht es XD.
Kann ich in mein kleines Rechenspiel auch irgendwie die Zeit einbinden, also z.B hat der Benutzer nach 2 sek. keine Lösung eingegeben, wird eine Nachricht oder sonst irgendwas ausgegeben?
Gast Gast
 2007-08-17 17:43
#98338 #98338
Daxim
 2007-08-19 13:46
#98378 #98378
User since
2007-08-01
114 Artikel
BenutzerIn
[Homepage]
user image
pl+2007-08-16 23:05:32--
Code: (dl )
1
2
3
4
5
6
7
8
9
my %rechenart = (
'+' => sub { $_[0] + $_[1] },
'-' => sub { $_[0] - $_[1] },
'*' => sub { $_[0] * $_[1] },
'/' => sub { $_[0] / $_[1] },
'**' => sub { $_[0] ** $_[1] },
);

my @zeichen = qw# + - * / ** #;
Stiltipp: Als Programmierer wiederholt man sich nicht, sondern generiert Mehrfachdaten aus anderen Daten. [¹] [²] Stell dir vor, du fügst einen neues Wertepaar zu %rechenart hinzu, aber vergisst, auch @zeichen zu aktualisieren. Hier wird's wohl kaum passieren, weil die beiden so dicht beieinanderstehen, aber sonst ist dies eine ernstzunehmende Fehlerursache.

Du kannst
Code (perl): (dl )
my @zeichen = keys %rechenart;
schreiben, oder keys %rechenart direkt überall dort verwenden, wo @zeichen benutzt worden wäre.
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2007-08-15 23:29.