Dumme Frage



  • das hab eich gemacht, aber es klappt trotzdem nciht

    so sieht jetzt mein Programm aus

    //Einfaches C Programm
    
    #include <iostream>
    
    int main()
    {
        std::cout<<"Hallo, Welt!"<<std::endl;
        getchar();
        return 0;
    }
    


  • getchar() ist in cstdio deklariert.



  • Hallo,

    Kann es sein, dass die Konsol nur einmal kurz aufpoppt und dann wieder verschwindet? wenn dem so ist, könntest du das Programm auch "manuell" über die Eingabeaufforderung starten. Ansonsten könnte es helfen, das getline(); durch cin.get(); zu ersetzen. Bei mir klappt das dann.

    Noch eine kleine Bemerkung: Du könntest nach #include <iostream> noch using namespace std; schreiben, dann musst du nict immer das std:: schreiben:

    //Einfaches C++ Programm
    
    #include <iostream>
    using namespace std;
    
    int main()
    {
        cout << "Hallo, Welt!" << endl;
        cin.get();
        return 0;
    }
    

    MfG, Jochen



  • Wo liegt den der Fehler ich benutze Dev C++

    //Einfaches C Programm
    
    #include <iostream>
    
    int main()
    {
        std::cout<<"Hallo, Welt!"<<std::endl;
        getchar();
        return 0;
    }
    

    zum Compilieren benutze+ausführen benutze ich F9



  • ---.-. schrieb:

    Wo liegt den der Fehler ich benutze Dev C++

    Mitlesen!!

    Janjan schrieb:

    getchar() ist in cstdio deklariert.

    Davon abgesehen ist Dev C++ extrem veraltet. Nutz lieber Visual C++ 2010 Express.



  • Janjan schrieb:

    getchar() ist in cstdio deklariert.

    Hmm...
    bei mir geht es auch ohne das inkludieren dieses Headers.

    Vielleicht könnte der TO auch einfach std::cin.get(); benutzen.



  • ---.-. schrieb:

    Wo liegt den der Fehler ich benutze Dev C++

    Eventuell ist genau das der Fehler 😉 (siehe Compiler&IDE-FAQ)


  • Administrator

    Walnut_Burl schrieb:

    Janjan schrieb:

    getchar() ist in cstdio deklariert.

    Hmm...
    bei mir geht es auch ohne das inkludieren dieses Headers.

    Das ist irrelevant. Der Standard schreibt vor, dass die Funktion in diesem Header deklariert ist. Es ist möglich, dass es bei dir indirekt über einen anderen Header eingebunden wird, allerdings ist es per Standard nicht garantiert und wenn du mal den Kompiler wechselst (sei es nur eine neue Version), ist es möglich, dass dein Programm nicht mehr kompiliert.

    pumuckl schrieb:

    ---.-. schrieb:

    Wo liegt den der Fehler ich benutze Dev C++

    Eventuell ist genau das der Fehler 😉 (siehe Compiler&IDE-FAQ)

    Ich habe die Erfahrung gemacht, dass der Hinweis, wo man suchen soll, alleine nicht reicht, daher:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-237002.html

    Grüssli



  • Dravere schrieb:

    Walnut_Burl schrieb:

    Janjan schrieb:

    getchar() ist in cstdio deklariert.

    Hmm...
    bei mir geht es auch ohne das inkludieren dieses Headers.

    Das ist irrelevant. Der Standard schreibt vor, dass die Funktion in diesem Header deklariert ist. Es ist möglich, dass es bei dir indirekt über einen anderen Header eingebunden wird, allerdings ist es per Standard nicht garantiert und wenn du mal den Kompiler wechselst (sei es nur eine neue Version), ist es möglich, dass dein Programm nicht mehr kompiliert.

    hmm OK kann gut sein...
    ich benutze Visual Studio 2010.

    Ich werd es mal eben mit dem DevC++ Compiler und Code::Blocks prüfen.


  • Administrator

    Walnut_Burl schrieb:

    Ich werd es mal eben mit dem DevC++ Compiler und Code::Blocks prüfen.

    Soll ich mich wiederholen? Es ist völlig irrelevant, ob es dort funktioniert. Das einzige was hier zählt, ist der Standard.

    Übrigens, zum automatischen Schliessen verhindern, gibt es noch einen FAQ Beitrag:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html

    Grüssli



  • Dravere schrieb:

    Walnut_Burl schrieb:

    Ich werd es mal eben mit dem DevC++ Compiler und Code::Blocks prüfen.

    Soll ich mich wiederholen? Es ist völlig irrelevant, ob es dort funktioniert. Das einzige was hier zählt, ist der Standard.

    Übrigens, zum automatischen Schliessen verhindern, gibt es noch einen FAQ Beitrag:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html

    Grüssli

    Nein du sollst dich nicht wiederholen.

    Ich wollte nur gucken ob es stimmt.

    Wenn der Standard es so vorschreibt werde ich mich ab jetzt wohl daran halten!



  • @Walnut_Burl
    Lass dich nicht so schnell glattbügeln. 🙂

    Mit iostream hast du cstdio automatisch mit an Bord.


  • Administrator

    Mitleid schrieb:

    @Walnut_Burl
    Lass dich nicht so schnell glattbügeln. 🙂

    Mit iostream hast du cstdio automatisch mit an Bord.

    Dann belege mal diese Aussage mit dem Standard. Nach meinen Informationen steht davon überhaupt nichts im Standard. Würde mich zudem auch sehr überraschen. Falls du übrigens ein Kompiler willst, welcher dies nicht unterstütz, dann nimm den GCC 4.4.0 von TDM. Und was ist so kompliziert daran, den richtigen Header für die entsprechende Funktion einzubinden?

    Grüssli



  • Wie würdest du denn z.B. §27.3 Absatz 1 interpretieren?

    Und natürlich ist nichts daran kompliziert den Header einzubinden. Macht man ja eigentlich normalerweise.

    Es geht mir nur darum, wenn du Walnut_Bur so überfährst, sollten die Fakten gesichert sein. Und da bin ich jetzt mal anderer Meinung. 🙂 Lass mich aber gerne überzeugen.

    Zum TDM Compiler kann ich nichts sagen.


  • Administrator

    Mitleid schrieb:

    Wie würdest du denn z.B. §27.3 Absatz 1 interpretieren?

    Zeig mir die genaue Stelle, wo dort steht, dass <cstdio> von <iostream> eingebunden wird. Dort steht nur, dass die Objekte in <iostream> mit den Ein/Ausgabe-Stream von C assoziert werden, welche man in <cstdio> finden kann.

    Mein Fakten sind gesichert. Wir hatten solche Diskussionen schon des öfteren und das Resultat war immer klar und dasselbe 😉

    Grüssli



  • Ohne den Header gibt es die Objekte nicht. Deklarierst du sie irgendwie selbst kommt es beim Einfügen des Headers zu einem Fehler. Kann man daraus nicht folgern, dass der Header dabei sein MUSS?

    Welche Diskussionen?


  • Administrator

    Mitleid schrieb:

    Ohne den Header gibt es die Objekte nicht. Deklarierst du sie irgendwie selbst kommt es beim Einfügen des Headers zu einem Fehler. Kann man daraus nicht folgern, dass der Header dabei sein MUSS?

    Da fragt man sich doch, wie es wohl TDM macht. Wer sagt denn, dass die Objekte in <cstdio> sein müssen? Es steht nur, dass es die gleichen Streams sein müssen, welche auch von den Funktionen in <cstdio> angesprochen werden. Man kann das intern allerdings auch noch weiter unterteilen. Es steht auch nirgends, dass die Funktionalität von <cstdio> über den Header <iostream> eingebunden werden muss. usw. usf.
    Nein, ich sehe keinen impliziten oder expliziten Hinweis darauf, dass <iostream> <cstdio> einbinden muss.

    Mitleid schrieb:

    Welche Diskussionen?

    Wann habe ich mich registriert? Das ist, glaube ich, auch schon ein paar Jährchen her. Also irgendwann in der Zeit zwischen meiner Registrierung und heute. Tut mir leid, ich bin zu faul, solche Diskussionen zu archivieren oder sie nun rauszusuchen 😉

    Grüssli


  • Mod

    Mitleid schrieb:

    Ohne den Header gibt es die Objekte nicht. Deklarierst du sie irgendwie selbst kommt es beim Einfügen des Headers zu einem Fehler. Kann man daraus nicht folgern, dass der Header dabei sein MUSS?

    Welche Diskussionen?

    Erstaunlich! Der GCC kennt cout wenn ich iostream einbinde, aber trotzdem kennt er getchar nicht. Dann muss wohl mein Compiler kaputt sein. Und trotzdem ist cout ganz klar mit stdout verbunden. Wie machen die das nur?
    [/Ironie]



  • Ihr seid nah dran mich zu überzeugen. Aber jetzt sehe ich mir diesen GCC mal selbst an. Um mir Arbeit zu ersparen könntet ihr die Ironie weglassen und einfach mal ausplaudern wie es gemacht wird.


  • Administrator

    Bemerkung am Rande:
    Der Header <iostream> muss nicht mal <istream> oder <ostream> einbinden, obwohl std::cout und std::cin darin deklariert sind, welche vom Type std::istream , bzw. std::ostream , sind. Wie das möglich ist, steht sogar im Standard (Stichwort: extern und <iosfwd> ). Darüber wurde auch mal ein Report beim Standard Komittee verfasst:
    http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#343

    Grüssli


Anmelden zum Antworten