Visual Studio 2017



  • anti-freak schrieb:

    Solltest du using namespace std nur innerhalb eines sehr begrenzten Bereichs nutzen, ist das sehr wohl in Ordnung (Funktionen), auch wenn ich es dort genauso wenig mag. In einem Header hat das aber absolut nichts zu suchen!

    Na, das klingt ja schon viel reflektierter. Auch wenn es mir artifiziell vorkommt, daß du das nur auf Funktionsebene zulassen willst und nicht auch für Source-Dateien.

    Nachdem ich im angegebenen Beispiel weder eine Headerdatei noch eine drohende Mehrdeutigkeit sehen kann, finde ich die using namespace -Deklaration hier ok. Wenn er Intellisense will, muß er halt Ctrl+Space drücken, zumindest VS kommt da nicht durcheinander.



  • audacia schrieb:

    anti-freak schrieb:

    Solltest du using namespace std nur innerhalb eines sehr begrenzten Bereichs nutzen, ist das sehr wohl in Ordnung (Funktionen), auch wenn ich es dort genauso wenig mag. In einem Header hat das aber absolut nichts zu suchen!

    Na, das klingt ja schon viel reflektierter. Auch wenn es mir artifiziell vorkommt, daß du das nur auf Funktionsebene zulassen willst und nicht auch für Source-Dateien.

    Nachdem ich im angegebenen Beispiel weder eine Headerdatei noch eine drohende Mehrdeutigkeit sehen kann, finde ich die using namespace -Deklaration hier ok. Wenn er Intellisense will, muß er halt Ctrl+Space drücken, zumindest VS kommt da nicht durcheinander.

    Ich habe das durchaus bewusst so formuliert. Immerhin war das Argument für das exposen von std mehr als fragwürdig ("dann esparst du dir das unnötige std:: vor cin und cout "). Auch wenn es vielen nicht gefällt, aber der namespace std ist generell nicht dazu gedacht, durch using namespace aufgelöst zu werden. Kann prinzipiell jeder machen wie er will, sofern er alleine im Code unterwegs ist. Dennoch halte ich es für die falsche Herangehensweise, Neulingen sowas direkt als "best practice"-Empfehlung mitzugeben.


  • Mod

    Immerhin war das Argument für das exposen von std mehr als fragwürdig ("dann esparst du dir das unnötige std:: vor cin und cout ").

    😕 Wofür soll man std sonst exposen?

    audacia schrieb:

    Auch wenn es mir artifiziell vorkommt, daß du das nur auf Funktionsebene zulassen willst und nicht auch für Source-Dateien.

    Ich glaube nicht, dass (mit Doppel-s, Opa) das Wort "artifiziell" hier Sinn ergibt. </ot> Seine Beschränkung ist mMn. nachvollziehbar: Viele Source Dateien werden tausende Zeilen lang, und sind dann ebenso wenig überschaubar wie das Kollektiv aller einen Header einbindenden Source Dateien. Ich tendiere mittlerweile dazu, oft verwendete Entitäten innerhalb von Source Dateien mittels using zu deklarieren. Ganz auskippen muss man seine Namensräume nur selten.



  • [quote="wob"]Außerdem solltest du mal deine Logik überdenken. 0- bis 18-jährige dürfen Auto fahren, ab 19 Jahren aber nicht mehr?[/quote]
    Sorry war mein Fehler, hätte ich vielleicht gesehen, wenn das Programm sich nicht sofort geschlossen hätte.



  • Danke für die ganzen Antworten, ich weiß jetzt aber immer noch nicht wie ich dafür sorge, dass das Programm sich nicht sofort schleißt.



  • manni66 schrieb:

    Starte das Programm mit Strg+F5 und gut iss.

    Oder starte es in einer Konsole.



  • DirkB schrieb:

    manni66 schrieb:

    Starte das Programm mit Strg+F5 und gut iss.

    Oder starte es in einer Konsole.

    Oder setze einen Breakpoint am Ende der main() Funktion.



  • [quote="dot"][quote="DirkB"][quote="manni66"]Starte das Programm mit Strg+F5 und gut iss.[/quote]
    Oder starte es in einer Konsole.[/quote]
    Oder setze einen Breakpoint am Ende der main() Funktion.[/quote]
    Mit Strg + F5 ändert sich nichts und wie setze ich einen Breakpoint?





  • Da dies alles Möglichkeiten sind, wo nur noch die Möglichkeit besteht, die Konsole über das Schließkreuzchen zu beenden, kannst Du ebenso gut eine kleine Endloschleife ans Ende der main() zu schreiben.

    Allerdings verstehe ich das Problem nicht. Stört es, das nur einmal das Alter abgefragt wird? Dann schreibe die Schleife um alle Anweisungen, als Bonus vielleicht eine Abfrage, wie diese Endlosschleife dann doch verlassen wird.



  • [quote="lemon03"]Allerdings verstehe ich das Problem nicht. Stört es, das nur einmal das Alter abgefragt wird? .[/quote]
    Das Problem ist das eben danach kein weiterer Code mehr geschrieben werden kann, wie du schon meintest, das man es nur noch durch schließen beenden kann. Das Programm schließt so schnell das nicht mal mehr die möglichkeit besteht den ausgegebenen Text zu lesen.



  • Also bei Eingabe von zB 22 kommt bei Dir nicht die Ausgabe "Sie duerfen kein Auto fahren!" und ein wartender Cursor?

    Dann müsste das an Visual Studio liegen. Das weiß ich dann aber leider nicht.



  • PS: Dann starte wirklich mal nur die .exe und schau, ob sie dann nach der Ausgabe stoppt und auf Tastendruck wartet.



  • [quote="lemon03"]Also bei Eingabe von zB 22 kommt bei Dir nicht die Ausgabe "Sie duerfen kein Auto fahren!" und ein wartender Cursor?

    Dann müsste das an Visual Studio liegen. Das weiß ich dann aber leider nicht.[/quote]
    Doch, mur das Programm schließt so schnell wieder, dass man den Text nicht lesen kann.



  • Nutzer1337 schrieb:

    Danke für die ganzen Antworten, ich weiß jetzt aber immer noch nicht wie ich dafür sorge, dass das Programm sich nicht sofort schleißt.

    Das liegt an dir, nicht an den Antworten.



  • Arcoth schrieb:

    audacia schrieb:

    Auch wenn es mir artifiziell vorkommt, daß du das nur auf Funktionsebene zulassen willst und nicht auch für Source-Dateien.

    Ich glaube nicht, dass (mit Doppel-s, Opa) das Wort "artifiziell" hier Sinn ergibt. </ot>

    Stimmt, "beliebig" hätte eher gepaßt. Und mach erst mal deine depperten Leerzeichen ("Source Dateien") weg, bevor du andere über die Orthographie belehrst.


  • Mod

    audacia schrieb:

    Arcoth schrieb:

    audacia schrieb:

    Auch wenn es mir artifiziell vorkommt, daß du das nur auf Funktionsebene zulassen willst und nicht auch für Source-Dateien.

    Ich glaube nicht, dass (mit Doppel-s, Opa) das Wort "artifiziell" hier Sinn ergibt. </ot>

    Stimmt, "beliebig" hätte eher gepaßt. Und mach erst mal deine depperten Leerzeichen ("Source Dateien") weg, bevor du andere über die Orthographie belehrst.

    Sagt wer? Du? 😃



  • In VS17 kannst Du F9 drücken, um in der aktuellen Zeile einen Breakpoint zu erstellen. Das erkennst Du dann an dem roten Punkt links von den Zeilenzahlen.

    Für solche trivialen Übungsprogramme unter Windows kannst du auch einfach system("pause"); ans Ende der main() dranhängen. Nach dem Sicherheitspatch für Meltdown/Spectre sind system calls zwar bis zu 50% langsamer, aber diesen performance-hit können wir in diesem Fall bedenkenlos vernachlässigen.

    Spaß beiseite, aber system("...") ist langsam, platformabhängig und irgendwie auch ein großes Sicherheitsrisiko, also wirklich nur für einfache Übungsprogramme nehmen. Das ist zwar nicht die optimale Lösung, aber alles Andere scheint aus welchem Grund auch immer nicht zu funktionieren.

    P.S.: Ich hoffe ich werde nicht gebannt, weil ich system("pause") vorgeschlagen habe.



  • Was spricht denn gegen

    std::cin.ignore()
    

    ?



  • anti-freak schrieb:

    Was spricht denn gegen

    std::cin.ignore()
    

    ?

    Probiers aus:

    #include <iostream>
    int main()
    {
        int x;
        std::cin >> x;
        std::cin.ignore();
    }
    

Anmelden zum Antworten