argv[][] Vergleich geht immer schief ::::WARUM
-
Moin C-Freunde ich verstehe folgende Sache nicht.
Wenn ich das Programm
<name.exe> -z 1 2 3 4 5 so aufrufe liefert es false und gibt die Hilfe aus. Warum. Eigentlich muesste meine logische Oderverknuepfung doch ausgeben1 oder 1 oder 0 oder 0 = 1 also true
/*Hilfefunktion bei falschen Parametern*/ int help (void) { printf("Usage: \n ueb04 [-z|-d|-m] -r <rows1> [<rows2>] [-c <cols1> [<cols2>]] \n [-f <first random>] [-l <last random>] [-s <random seed>]"); return 1; } /*Hauptprogramm*/ int main (int argc, char **argv) { if (((argc - 1) != 6) || (argv[1][1] != 'z') || (argv[1][1] != 'd') || (argv[1][1] != 'm')) { printf("%d", (argc -1)); return(help()); } return 0; }
Bitte helft mir
-
Du verdrehst da etwas:
Schau mal:
Nehmen wir mal an, argv[1][1] sei 'd';if ((argv[1][1] != 'z') || (argv[1][1] != 'd') || (argv[1][1] != 'm')) ...
Compiler sieht:
wenn: argv[1][1] etwas anderes ist als 'z' (was ja für 'd' zutrifft).Also ist die if bedingung bereits bei ersten Vergleich erfüllt.
-
das hab ich nicht verstanden,,,, ich will die hilfe ausgeben wenn eben keiner der parameter aus der if anweisung an der stelle nach dem minus auftaucht. ich denke, dass der paramter 0 der programmname ist und paramter eins in diesem fall das -z und der parameter [1][1] eben nur das z ist. ja und wenn dieses oder die anderen parameter gem. if nicht eingegeben wurden soll das prog kontrolliert abbrechen und die hilfe ausgeben.
wo ist mein denkfehler...
-
Ich denke, du willst das hier:
if (((argc - 1) != 6) || ((argv[1][1] != 'z') && (argv[1][1] != 'd') && (argv[1][1] != 'm')))
-
Mach mal aus den ODER'S UND'S...
Es müssen ja alle Bedingungen erfüllt sein damit die Hilfe nicht aufgerufen werden soll...____EDIT :: War wohl einer schneller als ich
-
ich will, dass wenn entweder z oder d oder m eingegeben werden dasoll dass programm anfangen zu arbeiten sonst die hilfe ausgeben. also nur einen der parameter und die muss ich doch logisch oder verknuepfen und nicht und dann müssen ja alle angaben true sein und nicht nur z oder d oder m.
-
Am besten gehst du das nochmal in Ruhe durch und du wirst verstehen warum da &&'s hin müssen...
-
meckert77 schrieb:
ich will, dass wenn entweder z oder d oder m eingegeben werden dasoll dass programm anfangen zu arbeiten
Also z || d || m -> arbeiten
Wenn dem nicht so ist, dann willst du die Hilfe ausgeben, richtig?
Also negieren wir das ganze mal logisch. Dafür gibts eine Regel (mir ist gerade der Name entfallen), die daraus folgendes macht
!(z || d || m) = !z && !d && !m
Auf deutsch heisst das soviel wie, wenn die Eingabe nicht z und nicht d und nicht m war, dann gib die Hilfe aus. Jetzt verständlich, warum du UND verwenden musst?
-
groovemaster schrieb:
Also negieren wir das ganze mal logisch. Dafür gibts eine Regel (mir ist gerade der Name entfallen
---> Demorganisches Gesetz
???