Anzahl Argumente der Kommandozeile



  • Hallöchen community,

    Stehe vor dieser Aufgabe:

    Schreiben Sie ein Programm, das Argumente von der Kommandozeile entgegennimmt
    und die Anzahl der Argumente auf der Konsole ausgibt.
    

    ich weiß, dass es mit dem argc und argv zu tun hat.

    Mit freundlichen Grüßen
    JhonnyWalker



  • int main(int argc, char* argv[])
    

    argc = Argument Count, Anzahl der Argumente.
    argv = Argument Vector, Array mit allen Argumenten.

    Das erste Argument ist immer das Programm selbst, dh. argc ist mindestens 1.



  • Genau so hatte ichs. Wie kann ich das nun prüfen, dass er hochzählt?



  • Ein bischen Eigeninitiative wäre nicht schlecht.

    #include <iostream>
    
    int main(int argc, char** argv)
    {
        std::cout << "Argumente uebergeben: " << argc << '\n';
    }
    


  • Ethon_notloggedin schrieb:

    Das erste Argument ist immer das Programm selbst, dh. argc ist mindestens 1.

    Ethon schrieb:

    std::cout << "Argumente uebergeben: " << argc << '\n';
    

    Mich dünket die 1 müsste noch ihre Rolle spielen. 😉



  • #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        cout << "Aufruf des Programms = " << argv[0] << endl;
        cout << (argc - 1) << " weitere Argumente wurden main() übergeben: \n";
    
        int i = 1;
    
        while(argv[i])
        {
            cout << argv[i++] << endl;
        }
    }
    


  • Overflow schrieb:

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        cout << "Aufruf des Programms = " << argv[0] << endl;
        cout << (argc - 1) << " weitere Argumente wurden main() übergeben: \n";
       
        int i = 1;
       
        while(argv[i])
        {
            cout << argv[i++] << endl;
        }
    }
    

    Hoffe du hast for-Schleifen gelernt:

    #include <iostream>
    
    int main(int argc, char* argv[])
    {
        std::cout << "Aufrufs-Verzeichniss des Programms: " << argv[0] << '\n'
                  << argc - 1 << " weitere Argumente wurden main() übergeben: \n";
    
        for(int i(1) ; i < argc ; ++i)
            std::cout << argv[i] << '\n';
    }
    


  • Hacker schrieb:

    Hoffe du hast for-Schleifen gelernt:

    Nö, wozu?

    #include <iostream>
    
    int main(int argc, char *argv[])
    {
      std::cout << "Aufrufs-Verzeichnis(s) des Programms: " << argv[0] << '\n'
                << argc - 1 << " weitere Argumente wurden main() übergeben: \n";
    
      while (++argv)
        std::cout << *argv << '\n';
    }
    


  • whiiler schrieb:

    Hacker schrieb:

    Hoffe du hast for-Schleifen gelernt:

    Nö, wozu?

    #include <iostream>
    
    int main(int argc, char *argv[])
    {
      std::cout << "Aufrufs-Verzeichnis(s) des Programms: " << argv[0] << '\n'
                << argc - 1 << " weitere Argumente wurden main() übergeben: \n";
    
      while (++argv)
        std::cout << *argv << '\n';
    }
    

    Kann dir gleich sagen, dass das Abstürzt. Du überprüfst nur den Zeiger. Der ist immer true (> 0).

    Edit: Das funktioniert aber, da haste aber Recht:

    #include <iostream>
    
    int main(int argc, char *argv[])
    {
      std::cout << "Aufrufs-Verzeichnis(s) des Programms: " << argv[0] << '\n'
                << argc - 1 << " weitere Argumente wurden main() übergeben: \n";
    
      while (*++argv)
        std::cout << *argv << '\n';
    }
    

    Oder so:

    #include <iostream>
    
    int main(int argc, char *argv[])
    {
      std::cout << "Aufrufs-Verzeichnis(s) des Programms: " << argv[0] << '\n'
                << argc - 1 << " weitere Argumente wurden main() übergeben: \n";
    
      while (--argc)
        std::cout << argc << ": " << argv[argc] << '\n';
    }
    


  • Sry ja, so meinte ich das.

    (Btw: könntest du das \201 wieder in ein ü umändern, sonst muss ich mich glaub übergeben)



  • whiiler schrieb:

    (Btw: könntest du das \201 wieder in ein ü umändern, sonst muss ich mich glaub übergeben)

    +1

    Ich habs dir schon oft genug gesagt Hacker, was ist daran so schwer?



  • Du editierst mir zu schnell, aber bei deiner zweiten Variante fehlt noch was bei argv.



  • whiiler schrieb:

    Sry ja, so meinte ich das.

    (Btw: könntest du das \201 wieder in ein ü umändern, sonst muss ich mich glaub übergeben)

    Wieso? Was hast du gegen Escape-Sequenzen (Gut, ja - es war nur ein Beispiel. Aber trotzdem)?



  • Hacker schrieb:

    Was [...] hast du gegen Escape-Sequenzen [...]?

    Vielleicht dass sie nur mit ANSI-Code (der unnötig ist und den sowieso niemand verwendet) funktionieren und mit anderen Zeichensätzen nicht?



  • Also. Was genau soll ich tun? Einfach 'ue' schreiben?



  • whiiler schrieb:

    Hacker schrieb:

    Was [...] hast du gegen Escape-Sequenzen [...]?

    Vielleicht dass sie nur mit ANSI-Code (der unnötig ist und den sowieso niemand verwendet) funktionieren und mit anderen Zeichensätzen nicht?

    Das stört mich nichtmal. Mich stört viel eher, dass ich, um die Ausgabe verstehen zu können, wissen muss, welches Zeichen das ist.



  • whiiler schrieb:

    Hacker schrieb:

    Was [...] hast du gegen Escape-Sequenzen [...]?

    Vielleicht dass sie nur mit ANSI-Code (der unnötig ist und den sowieso niemand verwendet) funktionieren und mit anderen Zeichensätzen nicht?

    Haha, ich bin sicher, Escape-Sequenzen gibt es auch mit anderen Sprachen 😃



  • 314159265358979 schrieb:

    whiiler schrieb:

    Hacker schrieb:

    Was [...] hast du gegen Escape-Sequenzen [...]?

    Vielleicht dass sie nur mit ANSI-Code (der unnötig ist und den sowieso niemand verwendet) funktionieren und mit anderen Zeichensätzen nicht?

    Das stört mich nichtmal. Mich stört viel eher, dass ich, um die Ausgabe verstehen zu können, wissen muss, welches Zeichen das ist.

    Das müsstest du mittlerweile aber auswendig können.



  • Nö. Ich habe besseres zu tun, als oktale ASCII Werte auswendig zu lernen.



  • Hacker schrieb:

    Overflow schrieb:

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        cout << "Aufruf des Programms = " << argv[0] << endl;
        cout << (argc - 1) << " weitere Argumente wurden main() übergeben: \n";
       
        int i = 1;
       
        while(argv[i])
        {
            cout << argv[i++] << endl;
        }
    }
    

    Hoffe du hast for-Schleifen gelernt:

    #include <iostream>
    
    int main(int argc, char* argv[])
    {
        std::cout << "Aufrufs-Verzeichniss des Programms: " << argv[0] << '\n'
                  << argc - 1 << " weitere Argumente wurden main() übergeben: \n";
    
        for(int i(1) ; i < argc ; ++i)
            std::cout << argv[i] << '\n';
    }
    

    Hmm, wüsste jetzt nicht was so schlimm an meiner Lösung ist. Funktioniert doch einwandfrei.



  • Overflow schrieb:

    Hmm, wüsste jetzt nicht was so schlimm an meiner Lösung ist. Funktioniert doch einwandfrei.

    Wenn du so weiter denkst... bitte, ich bin sicher 's macht Spaß kryptischen Code zu warten 😃
    Nein, ich mein ja nur. Ne for Schleife wäre in diesem Fall genau das, was du versuchst nachzuahmen.


Anmelden zum Antworten