Parameterverarbeitung

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Parameterverarbeitung

Beitrag von naums » So Sep 05, 2010 6:33 pm

laut dem Tutorial von hier: http://www.c-plusplus.de/cms/modules.ph ... &nocache=1 sollte man Parameter ans Programm folgendermaßen übergeben können:

Code: Alles auswählen

./program -b
und folgendermaßen verarbeiten können:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main (int *argc, char *argv)
{
    if (argv[1]=="-b")
    {
       printf("Hello World");
    }
}
soweit so gut. Allerdings funktioniert bei mir die if Anweisung nicht. Also: Der Parameter steht im Arrayelement argv[1] drin, aber die if Anweisung verläuft negativ, sodass der Text "hello world" in dem Fall nicht ausgeben wird, selbst wenn ich den Parameter so übergeben habe. Was mache ich falsch? bitte um hilfe.
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Parameterverarbeitung

Beitrag von Xin » So Sep 05, 2010 6:42 pm

Du vergleichst zwei Zeiger und die sind nicht identische. Beide Zeiger zeigen zwar auf den gleichen Text "-b", aber eben nicht auf den selben!

Du musst die Strings vergleichen: strcmp.

Ansonsten siehe hier: http://www.proggen.org/doku.php?id=c:fu ... :parameter
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Parameterverarbeitung

Beitrag von naums » So Sep 05, 2010 6:47 pm

Veränderter Code:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char* argv[])
{
    printf("\n hallo Programm\n\n");
    if (strcmp(argv[0],"-b"))
    {
       printf("Hello World");
    }
    printf("\n\n wie gehts?\n");
}
natürlich muss argv auch ein Array von zeigern sein, und argc ist kein array. Jetzt klappts prima. Danke Xin ^^

Edit:

Code: Alles auswählen

#include <stdio.h>
#include <stdlib.h>


int main (int argc, char* argv[])
{
    printf("INIMaker wird gestartet\n");
    int i=0;
    while (argc>i)
    {
        if (strcmp(argv[i], "-v")==true)
        {
            printf("\nINIMaker Version 2.00\n");
            printf("von Naums Project 2010\n");
        }
        if (strcmp(argv[i], "-h")==true)
        {
            printf("\n##Hilfedatei##\n");
            printf("-v    zeigt die Version an\n");
            printf("-h -? zeigt diesen Hilfetxt an\n");
            printf("-a    fügt einen Datensatz hinzu\n");
            printf("-e    löscht einen Datensatz\n");
            printf("-m    eine .ini Datei erstellen\n");
            printf("\nVielen Dank, dass sie INIMaker benutzen\n");
        }
        if (strcmp(argv[i], "-?")==true)
        {
            printf("\n##Hilfedatei##\n");
            printf("-v    zeigt die Version an\n");
            printf("-h -? zeigt diesen Hilfetxt an\n");
            printf("-a    fügt einen Datensatz hinzu\n");
            printf("-e    löscht einen Datensatz\n");
            printf("-m    eine .ini Datei erstellen\n");
            printf("\nVielen Dank, dass sie INIMaker benutzen\n");
        }
        i++;
    }
    return 0;
}
warum werden die teile von if immer ausgeführt, egal ob der Parameter angegebn ist oder nicht?
.globl truth
truth:
mov r0, #42
mov pc, lr

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Parameterverarbeitung

Beitrag von Xin » So Sep 05, 2010 7:43 pm

Weil Du Dir den Rückgabewert von strcmp nicht durchgelesen hast ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
naums
Beiträge: 740
Registriert: Sa Jan 02, 2010 10:40 pm
Kontaktdaten:

Re: Parameterverarbeitung

Beitrag von naums » So Sep 05, 2010 7:47 pm

Code: Alles auswählen

if (strcmp(argv[i], "-h")==0)
so klappts. Nochmal Danke. :D
.globl truth
truth:
mov r0, #42
mov pc, lr

Antworten