Void main - Funktioniert nicht.



  • Liebe Community,

    ich versuche mich momentan am Programmieren mit C++. Bin zur Zeit das Tutorial von Volkard am Lesen und hab folgenden "Fehler" entdeckt. Ich arbeite mit dem Dev-C++ Compiler in der neuesten Version.

    Volkard benutzt am Anfang:

    #include <iostream.h>
    void main()
    {
    

    Der Compiler öffnete bei mir daraufhin gar nichts, wenn ich auf Ausführen gegangen bin. Mir ist dann eingefallen das ich am Anfang beim anderen Tutorial dann

    #include <iostream.h>
    int main()
    {
    

    geschrieben habe. Nun funktioniert das auch, kann mir einer sagen wodran das liegt ? Wäre wirklich super lieb, damit ich wieder was dazu lerne.



  • sAcr1fice schrieb:

    kann mir einer sagen wodran das liegt ?

    int main() ist halt richtig, alles andere nicht.

    und es heißt

    #include <iostream>
    


  • Alles klar, also das ".h" weg.
    Ich habe noch eine kleine Frage und zwar, ich arbeite momentan mit Variablen und will das mit

    <<cin
    

    eine Tastatureingabe erfolgt, die Zahl des Radiuses bei einem Kreis. Wenn ich dann z.b. 9 und Enter eingebe, schließt sich das Fenster einfach, dabei soll er mit der Zahl weiterrechnen.

    // Bibliothek - Abrufen von Streams
       #include <iostream>
    
    // Beginn des Programmes
       int main()
       {
    
       float radius;
       cout<<"Bitte geben Sie den Radius ein:";
       cin>>radius;
       cout<<"Der Umfang betraegt:"<<2*3.14*radius<<endl;                                                                              
    
    // Verhindert, das sich das Fenster direkt wieder schließt.
       std::cin.clear();                                                                                           
       std::cin.ignore(std::cin.rdbuf()->in_avail());                                
       std::cin.get();                                                     
    
       };
    


  • #include <iostream>
    
    int main()
    { 
        float rad(0.0f);
        std::cout << "Radius: ";
        std::cin >> rad;
        std::cout << "Der Umfang betraegt " << (2.0f * 3.14f * rad) << std::endl;                                                                              
    
        std::cin.clear();                                                                                          
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'));                                
        std::cin.get();                                                    
    };
    


  • Ist das ; am Ende der Funktion von main() nicht überholt oder bin ich falsch informiert?

    zu void main():

    Es ist in c++ laut ANSI Standard so definiert das die Hauptfunktion Main immer einen Rückgabewert haben muss vom Typ int.

    Es gibt Compiler die void main() unterstützen, aber wenn du c++ lernst ist es am besten dir gleich int main() einzuprägen.

    Im übrigen vermisse ich bei dir die zeile

    using namespace std;

    damit deklariertst du deinen Namensbereich, sprich über diesen Namensbereich greifst du auf cout und cin, usw... zu.

    Solltest du diese Zeile bei manch einem Compiler vergessen (z.B. Visual c++)
    kreigst du damit auch ganz schnell Probleme.

    Besser glaich merken.

    Ansonsten musst du
    (wenn du vom Standard her programmieren willst und das würde ich dir empfehlen.)
    wie mein Vorposter std:: voransetzen. 😉

    zu iostream.

    Bei der Programmiersprache c heisst es iostream.h
    programmierst du c++ ist es iostream (c++ hat keine .h Endung mehr)

    so ähnlich verhält es sich mit ner ganzen Reihe Header, wobei bei manchen ein
    c vorangestellt wird:
    (time.h >> ctime)
    (math.h >> cmath)
    (stdlib.h >> cstdlib)

    usw... usw...
    ()



  • Searence schrieb:

    Bei der Programmiersprache c heisst es iostream.h

    Ne, in C heissts stdio.h 😉



  • Searence schrieb:

    using namespace std;

    damit deklariertst du deinen Namensbereich, sprich über diesen Namensbereich greifst du auf cout und cin, usw... zu.

    Solltest du diese Zeile bei manch einem Compiler vergessen (z.B. Visual c++)
    kreigst du damit auch ganz schnell Probleme.

    Aber pauschal using zu verwenden kann auch Probleme bereiten - gerade in Headern ist es günstiger, explizit mit "std::name" zu arbeiten.

    Bei der Programmiersprache c heisst es iostream.h
    programmierst du c++ ist es iostream (c++ hat keine .h Endung mehr)

    so ähnlich verhält es sich mit ner ganzen Reihe Header, wobei bei manchen ein
    c vorangestellt wird:
    (time.h >> ctime)
    (math.h >> cmath)
    (stdlib.h >> cstdlib)

    Für die Header der C Bibliothek mag das ja gelten, aber "iostream.h" ist kein Header der C Bibliothek, sondern eine Prä-Standard-Version des C++ Headers <iostream> (und nicht 100% kompatibel zu letzterem).



  • Nur wodran liegt es, das wenn ich eine Zahl eingebe und Enter drücke, das sich das Dos-Fenster wieder schließt ? Dann kann ich mit der eingegeben Zahl ja nicht rechnen.



  • Lösung: Starte das Programm von der Commandline aus!

    (Sehr ausführlich beschrieben im KonsolenFAQ 🙄



  • sAcr1fice schrieb:

    Nur wodran liegt es, das wenn ich eine Zahl eingebe und Enter drücke, das sich das Dos-Fenster wieder schließt ? Dann kann ich mit der eingegeben Zahl ja nicht rechnen.

    Das liegt an der Natur abgeschlossener Programme, dass sie sich beenden 😉

    Hast Du am Ende von main den Warteblock so verändert wie (D)Evil es gezeigt hat? Die Methode mit in_avail funktioniert nicht immer (muss sie strenggenommen auch nicht, wäre mal dafür das in der FAQ zu ändern).

    std::cin.clear();                                                                                          
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'));                                
    std::cin.get();
    


  • Daran, daß sich in Windows das Konsolenfenster automatisch schließt, wenn es nicht mehr gebraucht wird (sprich - wenn das Programm sich beendet hat). Schau dich mal in der Konsolen-FAQ um, wenn du Gegenmaßnahmen benötigst.



  • Searence schrieb:

    Im übrigen vermisse ich bei dir die zeile

    using namespace std;

    damit deklariertst du deinen Namensbereich, sprich über diesen Namensbereich greifst du auf cout und cin, usw... zu.

    Solltest du diese Zeile bei manch einem Compiler vergessen (z.B. Visual c++)
    kreigst du damit auch ganz schnell Probleme.

    verbreite bitte nicht solches gefährliches halbwissen, danke.


Anmelden zum Antworten