selfhtml.de - Alles für den Webmaster!

 

Empfehlung:

wix.com

Kostenlose Homepage

Besuchen Sie auch:

Jobs:

Anfänger braucht Hilfe: || und !=

Autor: bin123
Datum: 09.06.2010 15:06:57

Hallo!

Ich hoffe mir kann bei meinem Problem jemand weiterhelfen. Ich arbeite zur Zeit an einem Script, der Eingaben des Users in ein batchfile schreibt. Nun möchte ich in dem script einige falsch eingaben abfangen, da einige Eingaben nur bestimmte Werte beinhalten dürfen. Das habe ich versucht so zu lösen:

...

$a=1 # Kann nur 1 oder 0 sein


if ($a != 0 || 1)
{
        Error, $a darf nur 1 oder 0 sein
        
        goto finish
}

...


klappt aber nicht bei a = 1 und 0 geht er trotzdem zum finish und spuckt entsprechend error raus.

Das hier funktioniert hingen schon:

...

$a=1 # Kann nur 1 oder 0 sein


if ($a == 0 || $a == 1)
{
        goto weiter1;
}
else{
        Error, $a darf nur 1 oder 0 sein
        goto finish
}
weiter1:
...

Ist aber meiner Meinung keine Saubere Lösung, zumal ich zig solcher abfragen habe.

Allem Anschein scheitert es an "oder" und "nicht" weiß jemand was ich da falsch mache? Vielen Dank im Voraus!



Re: Anfänger braucht Hilfe: || und !=

Autor: T.Jung
Datum: 10.06.2010 15:09:19

> Das hier funktioniert hingen schon:
> (...)
> if ($a == 0 || $a == 1)
> (...)
> Ist aber meiner Meinung keine Saubere Lösung

Doch, es _ist_ eine saubere Lösung; denn es ist genau die Syntax, welche die meisten (oder eher gesagt: alle mir bekannten) Scriptsprachen verlangen.

Allerdings ist die Abfrage, die Du suchst, eine UND-Verknüpfung, also:
    if ($a != 0 && $a != 1)
    (...)

Das $a hinter dem UND bzw. ODER wegzulassen, ist aber in jedem Falle falsch.


> zumal ich zig solcher abfragen habe.

Falls Du damit meinst, dass Du zig »elseif« im Code hast, solltest Du Dir mal das switch-Statement angucken, siehe z.B. hier:
http://www.misc-perl-info.com/perl-switch.html

Aber falls Du meinst, dass Du an vielen Stellen »if« mit _einem_ »else« hast, musst Du den Code halt nach obigem Schema schreiben.

HTH,
Tobias Jung



Re: Anfänger braucht Hilfe: || und !=

Autor: SomeBdyElse
Datum: 12.06.2010 22:55:07

Hi!

> $a=1 # Kann nur 1 oder 0 sein
>
>
> if ($a != 0 || 1)

Das ist bestimmt nicht was Du meinst. T.Jung hat ja schon kommentiert. Das zweite Glied des Oders (also die "1") ist immer wahr. Damit wird das ganze Oder immer wahr, ist also eine Tautologie.



> $a=1 # Kann nur 1 oder 0 sein
>
>
> if ($a == 0 || $a == 1)
> {
>         goto
> weiter1;
> }
> else{
>
>         Error,
> $a darf nur 1 oder 0 sein
>         goto
> finish
> }
> weiter1:
> ...
>

Das else erscheint mir unnütz. Ist die erste Bedingung wahr springt der Programmfluss sowieso durch das "goto weiter1" über das else hinweg. Springt er nicht geht er immer in das else, da die Bedingung nicht wahr ist.

Der folgende Code sollte also equivalent sein:

if ($a == 0 || $a == 1)
{
  goto weiter1;
}

Error, $a darf nur 1 oder 0 sein
goto finish

weiter1:
...


Jetzt könntest Du das ganze noch umdrehen:
if (!($a == 0 || $a == 1))
{
  Error!
  goto finish;
}

... weitere Validierung
... Lösen der eigentlichen Aufgabe
finish:


Nach De Morgan ist !($a == 0 || $a == 1) equivalent zu ($a != 0 && $a != 1).

Grüße
SomeBdyElse