Dev-C++, Borland C++-Compiler und Visual C++ 2005



  • Hi Leutz,

    ich hab ein Problem mit diesem Quelltext:

    #include <iostream>
    using namespace std;
    int main()
    {
        const int Sunday = 0;
        const int Monday = 1;
        const int Tuesday = 2;
        const int Wednesday = 3;
        const int Thursday = 4;
        const int Friday = 5;
        const int Saturday = 6;
        int choice;
        cout << "Bitte geben Sie einen Tag ein (0-6): ";
        cin >> choice;
        if (choice == Sunday || choice == Saturday)
            cout << "\nSie sind bereits im Wochenende!\n";
        else
            cout << "\nOkay, legen Sie einen Urlaubstag ein.\n";
        return 0;
    }
    

    ...und zwar hatte ich Dev-C++ auf meinem Rechner und hab immer noch den Borland C++ Compiler 5.5 drauf und bei der compilierung bekomme ich eine Warnung das diese Konstanten nicht verwendet werden. (Ich muss dazu sagen ich bin ein absoluter Newbie und lerne gerade mit dem Buch "C++ in 21 Tagen".) Aber komischerweise kann ich den Quelltext ohne Probeme mit VC++ 2005 ee compilieren, ohne dass es zu Warnungen kommt. Und das Programm funktioniert dann auch richtig. Wenn ich es per Dev-C++ oder mit dem B C++-comp. compiliert hab, kann ich das Programm ausführen aber es kommt nur eine Leerzeile und das Programm wird wieder beendet.

    Woran kann es denn liegen dass es bei dem Borland compiler nicht funktioniert, bei dev+c++ kann ich mir denken dass es ein bug ist.

    Wuerde mich freuen, wenn einer ne Antwort darauf hätte.

    MFG



  • vielleicht wird die dosbox zu schnell wieder geschlossen?

    probier es mal von der konsole aus zu starten (start->ausfuehren->cmd)

    mfg aman..



  • ne ne, ich arbeite immer mit der eingabeaufforderung. das ist es ja. aber trotzdem danke.

    mfg



  • alexcppnewbie schrieb:

    cout << "\nSie sind bereits im Wochenende!\n";

    mach mal ein 'flush' an's ende der ausgaben. also so etwa:

    cout << "\nSie sind bereits im Wochenende!\n" << endl;
    


  • net schrieb:

    mach mal ein 'flush' an's ende der ausgaben. also so etwa:

    zumindest auf einem linuxsys mit gcc ist "\n" gleichbedeutend mit std::endl ..
    mfg aman..



  • Danke, jetzt bin ich schon ein Schritt weiter, das Progamm funktioniert richtig. Aber beim compilieren mit Borland C++ Compiler 5.5 kommt immernoch zur Warnung das die Konstanten nicht benutzt werden.

    MFG



  • alexcppnewbie schrieb:

    Danke, jetzt bin ich schon ein Schritt weiter, das Progamm funktioniert richtig. Aber beim compilieren mit Borland C++ Compiler 5.5 kommt immernoch zur Warnung das die Konstanten nicht benutzt werden.

    MFG

    das endl hat also funktioniert?

    if (choice == Sunday || choice == Saturday)
    

    hier benutzt du zwei der 7 konstanten. die anderen werden auch wirklich nicht benutzt.

    es ist ja eine warnung, dh, es muss nicht unbedingt ein fehler sein. in diesem fall ist es keiner..

    mfg aman..



  • Ich habs jetzt nochmal ohne "endl" probiert und das progie funktioniert auch ohne aufeinmal doch. Schon kurios! Und was die Warnung betrifft, weiß ich auch nicht warum er meckert, wenn das Progie jetzt tadellos funtkioniert. Vielleicht spinnt windoof :D. Naja, ich werde jetzt erstmal solange wie es geht mit visual c++ 2005, obwohl ich nich mehr viel von microsoft produkte halte, wegens spione usw.

    MFG



  • wie aMan schon schrieb, die Warnung bezieht sich auf z.B.:

    const int BlueMonday = 367;

    oder ähnliches. Sie gibt den Hinweis das der Quellcode übersichtlicher
    wird, wenn du die Zeile weglässt und 'BlueMonday' nicht weiter im
    Quelltext vorkommt.

    Versuch doch mal etwa die richtige Hälfte deines Quellcodes wegzulassen
    und du wirst sehen es funktioniert immer noch und die Warnung ist auch
    weg!

    Nur die Konstanten definieren, die auch wirklich gebraucht werden, z.B.:

    const int Sunday = 0;

    Hat also nix mit MS oder wie der Compiler auch immer heisst zu tun. Bei
    den meisten Compiler, die ich kenne, kannst du es in diesen einstellen welche
    Warnungen dir angezeigt werden sollen und welche nicht.

    MfG f.-th.



  • Also wenn ich dich richtig verstehe dann soll ich die Konstanten von Montag bis Freitag weglassen, aber dann ergibt es kein Sinn mehr? Wie gesagt das ist ja nur nen Beispiel-Quelltext, da ich gerade c++ erlerne mit dem Buch "C++ in 21 Tagen".
    es gibt ja noch eine andere Möglichkeit das Progie zu schreiben mit "enum" das funktioniert und es kommen auch keine Wahnungen oder Fehlermeldung.

    Hier ist der Quelltext mit "enum":

    #include <iostream>
    using namespace std;
    int main()
    {
        enum Days {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};
        int choice;
        cout << "Bitte geben Sie einen Tag ein (0-6): ";
        cin >> choice;
        if (choice == Sunday || choice == Saturday)
            cout << "\nSie sind bereits im Wochenende!\n";
        else
            cout << "\nOkay, legen Sie einen Urlaubstag ein.\n";
        return 0;
    }
    

    Aber ich glaub ich weiß wann ich enum bzw. const benutze. Aber ich hab noch nen Quelltext wo dann alle Konstanten benutzt werden:

    #include <iostream>
    using namespace std;
    int main()
    {
        const int Sunday = 0;
        const int Monday = 1;
        const int Tuesday = 2;
        const int Wednesday = 3;
        const int Thursday = 4;
        const int Friday = 5;
        const int Saturday = 6;
        int choice;
        cout << "Bitte geben Sie einen Tag ein (0-6): ";
        cin >> choice;
        if (choice == Sunday || choice == Saturday)
            cout << "\nSie sind bereits im Wochenende!\n";
        if (choice == Monday || choice == Tuesday || choice == Wednesday || choice == Thursday || choice == Friday)
            cout << "\nOkay, legen Sie einen Urlaubstag ein.\n";
        return 0;
    }
    

    Das müsste ja dann auch funktionieren.

    Danke für eure Tipps.

    MFG alexcppnewbie 😃



  • @f.th. jetzt hab ich verstanden was du meinst, jetzt im nach hinein ist das auch logisch, das die Warnungen kommen, die Konstanten von Montag bis Freitag werden eigentlich nicht angesprochen. Also ist die Warnung begründet. Ich danke euch noch mal für eure Hilfe.

    Mfg alexcppnewbie



  • an alexcppnewbie

    Borland mag die Header-Datei nur mit.h (#include <iostream.h>) und Microsoft kann z.B. getchar(); nicht ausstehen. Das sind nur solche Kleinigkeiten. Es gibt auch Probleme mit #define bei Microsoft. Das Leben ist schon hart, aber sonst ist das Visual Studio schon eine Klasse für sich. Borland war gestern.

    🕶



  • NANU schrieb:

    Borland mag die Header-Datei nur mit.h (#include <iostream.h>) und Microsoft kann z.B. getchar(); nicht ausstehen. Das sind nur solche Kleinigkeiten. Es gibt auch Probleme mit #define bei Microsoft. Das Leben ist schon hart, aber sonst ist das Visual Studio schon eine Klasse für sich. Borland war gestern.

    Man darf IMHO die Unterschiede nicht zwischen den Compilern untereinader ausmachen oder vergleichen, sondern gegenüber dem C++ Standard.
    Und das ist aktuell der MS-VC8 Compiler einer der Besten (also am besten Konform).
    Deshalb ist es logisch und 100% korrekt, dass er die Datei "iostream.h" nicht kennt.



  • NANU schrieb:

    Borland mag die Header-Datei nur mit.h (#include <iostream.h>) ...

    aktuelle Borlandcompiler haben keinerlei Probleme mit standardkonformen Headern (ohne .h). Auch der BCC5.5 sollte das können.



  • Stimmt braunstein, der free bcc 5.5 kann standardkonforme Header.

    Der Bcc4.0 noch nicht - aber ab 4.0 gibt es STL-Bibliteken (z.B.: STLport)
    und andere mit denen man diese Funktionen nachrüsten kann.

    STLport gibt es auch für andere Compiler.

    Viele Poststings zu den STL-Fähigkeiten der Borland-Compiler sind falsch,
    derer Autoren gehen wohl immer noch von Turbo Cpp 3.0 aus. Diese sollten
    aber mal bei gleich alten MS-Produkten schauen wie es da um Cpp bestellt
    war.

    MfG f.-th.


Anmelden zum Antworten