scanf_s funktioniert nicht richtig



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C (alle ISO-Standards) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Peter329 schrieb:

    ... aber wenn ich dann nur die Eingabetaste drücke bleibt die Anwendung immer noch im "scanf_s" Prompt hängen. Erst wenn ich mindestens EIN Zeichen eingebe, kann ich die Anwendung beenden.

    Das entspricht genau dem Verhalten für diesen Formatstring.

    Peter329 schrieb:

    Wie mache ich das denn richtig? Ich hoffe, ich habe mein Anliegen verständlich machen können

    Indem du das Programm in einer offenen Konsole startest.
    Schließlich ist es ein Konsolenprogramm.

    Der Anfängerweg:
    Du musst erstmal alle Zeichen aus dem Eingabestrom lesen, oder löschen.
    Das ist mit Standard-C schwierig.

    Aber du kannst zumindest bis zum nächsten Newline lesen: https://www.c-plusplus.net/forum/p1146014#1146014

    Das Ganze dann vor dem continue scanf und das Leerzeichen muss dann aber wieder aus dem Formatstring raus.
    Allerdings ist scanf da auch übertrieben, denn ein getchar(); reicht.

    In manchen IDE kann man auch einstellen, dass das Konsolenfenster offen bleibt (beim Start aus der IDE heraus)



  • Also erst mal vielen Dank für deine Antwort.

    Mir scheint, das Lesen mit scanf_s oder mit cout << ... ist schon ein bissl hakelig. Aber gut ... die Konsolanwendung ist ja auch nur zum Testen und Lernen und von daher komm ich damit jetzt schon klar.

    Die Idee mit dem Offenhalten der Konsole gefällt mir sehr gut. Ich benutze Visual Studio 2015 ... jetzt hab ich schon eine ganze Weile gesucht, wo man das einstellen kann ... Ist meine Mühe vielleicht vergebens, weil man das in dieser IDE gar nicht einstellen kann ? Oder finde ich das einfach nicht ?

    LG



  • Das sollte auch dort noch gehen mit "Start Without Debugging" s. Start Debugging vs. Start Without Debugging

    PS: Lesen geht in C++ mit "cin" (nicht "cout" 😉



  • Peter329 schrieb:

    Die Idee mit dem Offenhalten der Konsole gefällt mir sehr gut. Ich benutze Visual Studio 2015 ... jetzt hab ich schon eine ganze Weile gesucht, wo man das einstellen kann ...

    Mach einfach eine eigene Konsole, unabhängig von VS, auf!



  • Zum Offenhalten einer von der IDE geöffneten Konsole, ist es üblicherweise erfoderlich, dass das Programm nicht beendet wird. Das kann man auf verschiedene Arten erreichen.

    Im Extremfall ein "while(1);" am Ende. 😃



  • Das ist die beste Idee ever ... eine busy-Schleife, einfach so ... und wenn das Programm dann mal fertig ist, dann ist es immer noch nicht fertig, weil da solche Krücken drin sind ...

    Es scheinen manche Leute wirklich zu dämlich zu sein, eine Konsole zu öffnen, anders ist es doch kaum zu erklären, mit welchen Verrenkungen manche versuchen, ein Programm daran zu hindern, zu Ende zu laufen 😕



  • Belli schrieb:

    Es scheinen manche Leute wirklich zu dämlich zu sein, eine Konsole zu öffnen, anders ist es doch kaum zu erklären, mit welchen Verrenkungen manche versuchen, ein Programm daran zu hindern, zu Ende zu laufen 😕

    Es hat ihnen halt noch keiner gezeigt.
    Klicki-Bunti-Syndrom.



  • Belli schrieb:

    Das ist die beste Idee ever ... eine busy-Schleife, einfach so ... und wenn das Programm dann mal fertig ist, dann ist es immer noch nicht fertig, weil da solche Krücken drin sind ...

    Diese Krücke kommt an eine zentrale Stelle, z.B. in eine Funktion namens "wait4e4()" und dann ist alles wieder ok. 🙂



  • DirkB schrieb:

    Belli schrieb:

    Es scheinen manche Leute wirklich zu dämlich zu sein, eine Konsole zu öffnen, anders ist es doch kaum zu erklären, mit welchen Verrenkungen manche versuchen, ein Programm daran zu hindern, zu Ende zu laufen 😕

    Es hat ihnen halt noch keiner gezeigt.
    Klicki-Bunti-Syndrom.

    Bei den richtigen KlickiBuntis tut sich kein ConsoleWindow mehr auf, sondern die kriegen stdin/stdout in ein Child-Windows ihrer IDE geliefert. 🙂


Anmelden zum Antworten