Befehlszeilen Parametrierung bei C++

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von rezzer, 4. Januar 2007 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 4. Januar 2007
    Servus,

    Ich bin schon fast am verzweifeln...

    Ich würde gerne wissen wie ich die Befehlszeilen Parametrierung bei C++ hinbekomme...
    Also ich möchte gerne den Programm fluss durch die eingabe von parametern beeinflussen
    zb.

    Code:
    c:\hallo.exe -h world 
    hallo world
    Ich habe echt keine ahnung wo nach ich da suchen muss ^^ wäre über ein kleines tutorial
    sehr dankbar oder auch ein link zu einer dokumentation wäre nett ^^

    mfg

    rezzer
     
  2. 4. Januar 2007
    AW: Befehlszeilen Parametrierung bei C++

    Hmm nen Link zu nem tut hab ich jetzt so nicht, aber ich kann es dir so in kurzform und wie ich es bisher weiß an diesem Bsp. erklären:
    Code:
    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[]) // argc gibt die Anzahl der Argumente an, argv ist der Pointer auf die Argumente
    { // wobei zu beachten ist, dass der Pointer auf Strings zeigt und nicht auf einzelne Buchstaben 
     for(int i = 0; i < argc+1; i++)
     {
     if(argv[i] != '\0')
     {
     cout << "Argument Nr. " << i+1 << ": " << argv[i] << endl; // Grundsätzlich, ist das erste Argument, was übergeben wird, der Name der Datei
     } // Bei jedem Leerschlag wird getrennt (also ein neues Argument beginnt)
     else
     {
     cout << "Ende\n";
     }
     }
     cout << "Anzahl der uebergebenen Argumente: " << argc << endl; // Hier wird, die Anzahl der übergebenen Parameter angezeigt
     system("PAUSE");
     return EXIT_SUCCESS;
    }
    greetz shockwave

    *+~edit~+*
    tja mir war irgentwie noch mal langweilig... da hab ich einfach mal, ein bisschen weiter gesponnen.
    Du musst einfach inner Console "Parameter.exe -h 7845" eingeben (oder wie du die Datei eben genannt hast) und schon wird dir die Zahl 7845 die zuvor aus 4 chars bestand, in einen integer-wert gepackt... so alleine völlig nutzlos, aber sollte auch hauptsächlich zur Veranschaulichung der Nutzun der Argumente/Parameter beitragen.
    Code:
    #include <cstdlib>
    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    int main(int argc, char *argv[]) // argc gibt die Anzahl der Argumente an, argv ist der Pointer auf die Argumente
    { // wobei zu beachten ist, dass der Pointer auf Strings zeigt und nicht auf einzelne Buchstaben 
     for(int i = 0; i < argc+1; i++)
     {
     if(argv[i] != '\0')
     {
     cout << "Argument Nr. " << i+1 << ": " << argv[i] << endl; // Grundsätzlich, ist das erste Argument, was übergeben wird, der Name der Datei
     } // Bei jedem Leerschlag wird getrennt (also ein neues Argument beginnt)
     else
     {
     cout << "Ende\n";
     }
     }
     cout << "Anzahl der uebergebenen Argumente: " << argc << endl; // Hier wird, die Anzahl der übergebenen Parameter angezeigt
     if(argc <= 1)
     {
     return EXIT_SUCCESS;
     }
     char *Buffer = new char;
     Buffer = argv[1];
     int VeraendWert = 0;
     int BufferLaenge = 0;
     cout << "Aktueller Buffer: " << Buffer << endl;
     if(Buffer[0] == '-' && Buffer[1] == 'h')
     {
     //cout << "if erfolgreich\n";
     Buffer = argv[2];
     cout << "Aktueller VeraenderungsWert: " << VeraendWert << endl;
     for(int i = 0; i < 55; i++) // Hier wird nur die Bufferlänge, also die Länge der Zahl herausgefunden
     {
     if(Buffer[i] != '\0')
     {
     BufferLaenge++;
     }
     else
     {
     break;
     }
     }
     cout << "Bufferlaenge: " << BufferLaenge << endl;
     for(int i = 0; i < 55; i++) // Hier wird nun aus einer Zahl die aus mehreren einzelnen Chars besteht
     { // zu einem integer-wert gemacht... es geht sicherlich auch noch einfacher
     if(Buffer[i] != '\0')
     {
     char charBuffer = Buffer[i];
     int intBuffer = static_cast<int> (charBuffer-48);
     cout << "charBuffer: " << charBuffer << endl;
     cout << "intBuffer: " << intBuffer << endl;
     cout << "VeraenderungsWert: " << VeraendWert << endl;
     cout << "Multiplikator: " << (pow(10, BufferLaenge)/10) << endl;
     VeraendWert +=(intBuffer * ((pow(10, BufferLaenge))/10));
     BufferLaenge--;
     }
     else
     {
     break;
     }
     }
     }
     cout << VeraendWert << endl;
     system("PAUSE");
     return EXIT_SUCCESS;
    }
     
  3. 4. Januar 2007
    Zuletzt von einem Moderator bearbeitet: 15. April 2017
    AW: Befehlszeilen Parametrierung bei C++

    Thx schon mal für die antworten
    BW haste schon bekommen

    Mhh.. jetzt hab ich da en prob ^^
    Der Compiler (cygwin) hat doch noch ein paar probleme mit meinem Code.
    Kann es denn sein das die Switch - Case nicht funktioniert weil diese nur mit
    einem Int betrieben werden kann ?
    Wenn ja wie kann ich denn dann die eingabe eines Parameters in ein
    Integer verwandeln oder gibt es da ganz andere einfachere möglichkeiten ?


    cygwinzq5.jpg
    {img-src: //img145.imageshack.us/img145/82/cygwinzq5.jpg}

    Hier noch mal ein Beispiel code wie ich mir die verwendung vorstelle...

    Code:
    #include <iostream>
    using namespace std;
    
    int main(int argc, char *argv[]) 
    {
    string programmname = argv[0];
    string para = argv[1];
    int bed = 0; 
    
    switch(para)
     {
     case a: bed++;break;
     case b: bed = 2;break;
     default: cout << "Falscher übergabe parameter!" << endl;break;
     }
    
    if(bed <= 2)
    {
    cout << programmname << "sagt" << "Hallo Welt" << endl;
    }
    else
    {
    cout << programmname << "sagt" << "Hallo World" << endl;
    }
    
    Ich hoffe ihr könnt mir helfen...

    mfg
    rezzer
     
  4. 4. Januar 2007
    AW: Befehlszeilen Parametrierung bei C++

    switch quantity not an integer
    in deinem switch steht ein Char-Array, man darf hier aber nur nach ganzen Zahlen prüfen. Richtig wär z.B. para[0]...

    'a' undeclared
    bei deinem "case a:" musst du das a in einfachen Hochkommas stellen, sonst denkt der Compiler es ist eine Variable. Also "case: ' a ' "

    'b' undeclared
    selbe wie oben...

    expected '}' at the end of input
    Du hast eine Klammer vergessen
     
  5. 4. Januar 2007
    AW: Befehlszeilen Parametrierung bei C++

    Soo ich habe zu danken ^^
    Ich habe fast alles verbessert.. ^^
    Ich habe noch nen elementares problem mit

    Code:
    switch quantity not an integer
    in deinem switch steht ein Char-Array, man darf hier aber nur nach ganzen Zahlen prüfen. Richtig wär z.B. para[0]...
    
    Wäre nett wenn mir das jemand etwas genau beschreiben könnte

    PS: BW is auch raus ^^

    MfG

    rezzer
     
  6. 4. Januar 2007
    AW: Befehlszeilen Parametrierung bei C++

    du kannst mit switch keine chars(zumindest keine Zeichenketten) vergleichen sondern nur integer (Bsp.: int Test = 4)
    daher müsstest du das mit ner if-abfrage machen. Bsp.: if(para[0] == 'h' && para[1] == 'a' && para[2] == 'i'){ bla dein code } else if(para[0] == 'b' && para[1] == 'l' && para[2] == 'u' && para[3] == 'b') { bla dein code } else { cout << "falsche eingabe" }
    Wie du Zahlen, deren einzelne Ziffern auf mehrere chars verteilt stehen, zu einer zusammen bekommst siehst du ja in meinem obigen Beispiel.

    greetz shockwave
     
  7. 4. Januar 2007
    AW: Befehlszeilen Parametrierung bei C++

    chars können schon verglichen werden, es ist ja nichts anderes wie eine Zahl zwischen 0 und 255 der als Zeichen interpretiert wird.

    Code:
    char c = 'a';
    switch (c)
    {
     case 'a': break;
    }
    Das würde z.B. funktionieren.

    Aber ganze Zeichenketten kann man so nicht vergleichen.
     
  8. 4. Januar 2007
    AW: Befehlszeilen Parametrierung bei C++

    Sehr gut ihr 2 !!
    BW hattet ihr ja schon xD
    Soo ich habe es nun mit if anweisungen geregelt..
    ist zwar umständlicher aber dafür gehts

    Ich mach dann mal close ^^

    MfG

    rezzer
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.