Zum Inhalt springen

Übergabe von int argc, char *argv[] klappt nicht bei jedem Compiler


lit-web

Empfohlene Beiträge

Guten Morgen Leute und vorab schon ein schönen Sonntag.

Ich habe in der Schule Programme geschrieben über Visual C++ Express 3 und da funktionierte mein Code. Zu Hause habe ich die Aufgabe aus der Schule noch mal bisschen überarbeitet und da funktioniert das nicht. Zu Hause verwende ich Codeblocks und den MingW Compiler.

Hier mal meine Code.


#include <iostream>

#include <string>

#include <cmath>


using namespace std;


class Kugel{


    private:

        double radius, pi;


    public:


        Kugel(){


            radius = 0;

            pi = 3.14;

        }


        void set_radius(double rad){


            radius = rad;

        }


    private:


        double get_radius(){


            return radius;

        }


    public:


        void showRadius(){


            cout<<"\n\nRadius = "<<radius;

        }


        void showDurchmesser(){


            double durchm = (radius * 2);


            cout<<"Durchmesser = "<<durchm;

        }


        void showUmfang(){


            double umfang = (2 * pi * pow(radius, 2));


            cout<<"\nUmfang = "<<umfang;

        }


        void showObfl(){


            double obfl = (2 * pi * pow(radius, 3));


            cout<<"\nOberfläche = "<<obfl;

        }


        void showVol(){


            double vol = ((3 / 4) * pi * pow(radius, 3));


            cout<<"\nVolumen = "<<vol;

        }


    ~Kugel(){}

};


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


    char buffer[5];

    double radius;


    Kugel kug;


    if(argc == 2){


        for(int i = 0; i < 5; i++){


            buffer[i] = *argv[1]++;

        }


        //radius string in double wert casten

        radius = atof(buffer);


        if(radius < 0){


            radius *= (-1);


            kug.set_radius(radius);

        } else {


            kug.set_radius(radius);

        }


            kug.showRadius();


            kug.showDurchmesser();


            kug.showUmfang();


            kug.showObfl();


            kug.showVol();


    } else if(argc > 2) {


        cout<<"Zu viel Parameter übergeben: ";

    } else if (argc < 2){


        cout<<"Zu wenig Parameter übergeben: ";

    }


    return 0;

}


Wie gesagt in der Schule konnte ich nun in der Konsole von Visual C++ Express 3 den Programmnamen eingeben und einen Parameter und da funktionierte alles. Aber nun rufe ich im Codeblocks über den Button Build and Run die Konsole auf und da kommt sofort die Meldung das zu wenig Parameter übergeben wurden.

Was kann bzw. muss ich machen damit das überall gleich abläuft?

Danke für eure Hilfe lit-web

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich weiss eigentlich gar nicht was du willst,

dein programm funzt doch genau so wie du es geschrieben hast.

:)

die ausgabe "zu wenig prameter ..." kommt, weil du ja warscheinlich kein argument übergibst, wenn du den code mit run ausführst.

dazu fällt mir jetzt einfach mal ein:

programm builden ...

dann rechtsklick arbeitsplatz -> eigenschaften -> erweitert -> umgebungsvariablen.

Dann : (wenn noch nicht vorhanden die variable 'PATH' erstellen und als wert

dann zb. C:\xampp\mysql\bin einstellen.

jetzt muss du nur noch deine exe datei in den angegebenen ordner verschieben

und kannst sie mit deinem argument in der cmd ausführen.

sollte eigentlich klappen...

hoffe ist verständlich ... have fun

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was genau meinst du denn mit "Konsole"? Die ganz normale Eingabeaufforderung von Windows? Die hat absolut nichts mit der Entwicklungsumgebung zu tun.

Nein die nicht. Es gibt doch unter Visual c++ Express gleich eine Eingabeaufforderung mit dazu. Und mit der arbeiten wir in der Schule. So und zu Hause habe ich eben die IDE CodeBlocks und mache das da über die Build and Run Schlatfläche. So in der Schule ging das ganze in dem dann eben den programmnamen eingegeben habe und den oder die Parameter. Hier geht das aber nun nicht mehr.

Ich habe mir auch kein Projekt angelegt sondern nur die .cpp Dateien.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke ich habe dein Problem verstanden:

Dein Programm scheint ja soweit korrekt zu sein.

1)

In der Schule geht ihr so vor, dass ihr das Programm mit VisualStudio Express compiliert und dann mit Hilfe der getrennt zur Verfügung gestellten Konsole startet. Diese Konsole ist nichts weiter, als das die ganz 'normale' Eingabeaufforderung mit ein paar zusätzlichen definierten Umgebungsvariablen, die vom VisualStudio benötigt werden. Beim Aufruf des Programms mit der Konsole gibst du dann alle benötigten Parameter mit an, also "<Programmname> <Parameter1> <Parameter2> ..." . Diese Vorgehensweise ist zwar etwas umständlich, aber völlig ok.

2)

Zu Hause nimmst du CodeBlocks und als Compiler den gcc aus der MinGW Umgebung. Soweit so gut. Durch den Befehl 'Build and Run' compilerst du dein Projekt und anschließend wird es sofort gestartet. Hier liegt auch dein Problem. Du hast offensichtlich nicht angegeben mit welchen Parametern dein Programm (automatisch) gestartet werden soll und dein Programm beschwehrt sich anschließend mit Recht darüber, dass es keine hat.

Lösung:

a) Auch CodeBlocks bietet die Möglichkeit dein Projekt nur zu compileren und nicht automatisch zu starten. Den genauen Menüpunkt hab ich nicht im Kopf. Anschließend startest du die Eingabeaufforderung (Befehl: cmd) und wechselst in das Ausgabeverzeichniss deines Projektes. Dort sollte sich die erstellte EXE deines Programms befinden. Jetzt kannst du wie in der Schule dein Programm mit allen benötigten Parametern aufrufen.

B) Sowohl VisualStudio, als auch CodeBlocks bieten in den Projeteinstellungen einen Menüpunkt 'Debuggen'. Die genaue Bezeichnung bei CodeBlocks ist mir auch hier nicht bekannt, aber das sollte zu finden sein :cool:.

Dort kann eingestellt werden, wie das fertig erstellte Programm gestartet werden soll. Dort sind hauptsächlich die Einstellungen für das 'Working Directory' und die 'Command Arguments' wichtig. Der Working Path ist Standarmäßig das Ausgabeverzeichnis des Compilers. Im Punkt Commandline Arguments werden zusätzliche Argumente angegeben, die dein Programm benötigt. Wenn du dort die deine Parameter angibst sollte alles funktionieren.

Nachtrag:

Der Befehl 'Build and Run' in CodeBlocks, beziehungsweise 'Run' im VisualStudio machen das gleiche, wie du in der Konsole. Sie öffnen eine Konsole und starten dein Programm mit den in den Projekteinstellungen angegebenen Parametern.

Ich hoffe das war verständlich :)

Viel Erfolg

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...