Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » FAQ C / C++ (WinAPI, Konsole) » Konsolanwendung -Fenster weg- Lösung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.03.2004, 19:15 Uhr
Pablo
Supertux
(Operator)


Wenn man unter Windows Konsolanwendungen schreibt, führt man sie in den meisten Fällen per Doppelklick. Die Folge ist, dass das Fenster automatisch verschwindet.

Ursache
Wenn ein Programm die letzte Zeile erreicht und beendet, wird dessen Fenster vom Betriebsystem (in diesem Fall Windows) automatisch gelöscht, d.h. das Fenster verschwindet.

Das gleiche passiert mit unseren Konsoleanwendungen, wenn sie die return Anweisung der main Funktion erreichen, ist das Programm beendet und das Fenster verschwindet. Es gibt zum Glück verschiedene Lösungen zu diesem Problem.

Lösung 1 (ANSI C)


C++:
#include <stdio.h>
void warte_auf_taste()
{
    printf("\n\nENTER drücken, um fortzufahren.");
    getchar();
}

int main()
{
    printf("Hello, World\n");
    warte_auf_taste();
    return 0;
}



Lösung 2 (ANSI C++)


C++:
#include <iostream>
#include <cstdio>
void warte_auf_taste()
{
    std::cout << std::endl << std::endl << "ENTER drücken, um fortzufahren.";
    getchar();
}

int main()
{
    std::cout << "Hello, World" << std::endl;
    warte_auf_taste();
    return 0;
}



Es kann passieren, dass es nicht funktioniert. Das kann passieren, wenn im Puffer stdin noch Zeichen enthalten sind. Zum Beispiel:


C++:
#include <stdio.h>
void warte_auf_taste()
{
    printf("\n\nENTER drücken, um fortzufahren.");
    getchar();
}

int main()
{
    char x[10];
    printf("Hello, World\n");
    scanf("%s", x);
    warte_auf_taste();
    return 0;
}



Eine Lösung dafür ist die Verwendung von einem weiterm getchar() oder weitere getchar(), die nötig sind.

C++:
#include <stdio.h>
void warte_auf_taste()
{
    printf("\n\nENTER drücken, um fortzufahren.");
    getchar();
    getchar();
}

int main()
{
    char x[10];
    printf("Hello, World\n");
    scanf("%s", x);
    warte_auf_taste();
    return 0;
}



Lösung 3 (DOS)
Die dritte Lösung ist sich mit der DOS-Shell anzufreunden, auch wenn DOS nicht zu freundlich zu dir ist.

Geh auf Start-->Run (oder Ausführen auf DE): und gibst cmd ein.

Mit cd bewegst du ich zum Verzeichnis des Programmes.
Nehmen wie an, das Programm ist in C: \Probe. Nach der Eingabe von cmd steht.

C++:
C:\Documents and Settings\Username\Desktop> cd\
C:\> cd Probe
C:\Probe> cd bin // meistens steht in das bin oder debug Verzeichnis, egal
C:\Probe\bin> probe // vorausgesetzt, dass probe der Name der Ausführbaredatei ist


--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 03.10.2005 um 20:51 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.06.2004, 19:43 Uhr
0xdeadbeef
Gott
(Operator)


Ich würde in C++ eher std::cin.get() als getchar benutzen, aber was solls. Die Grundmessage ist halt, dass man immer ein Auge darauf haben muss, was sich noch im Stream befindet, und dass man es ggf. vorher raus holt.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.06.2004, 20:03 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


zur 3ten Lösung würde ich noch folgendes hinzufügen:


C++:
#include <iostream>
#include <cstdio>
void warte_auf_taste()
{
  system("pause");
}

int main()
{
    std::cout << "Hello, World" << std::endl;
    warte_auf_taste();
    return 0;
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.06.2004, 20:16 Uhr
Pablo
Supertux
(Operator)


Das ist möglich, aber system ist sehr unsicher und sollte man die Finger davon lassen. Virtual hat vor kurzem erklärt warum.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.06.2004, 17:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


unter win funzt das aber so auf jedenfall
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
08.03.2005, 17:36 Uhr
Pablo
Supertux
(Operator)



Zitat von FloSoft:
zur 3ten Lösung würde ich noch folgendes hinzufügen:


C++:
void warte_auf_taste()
{
  system("pause");
}




system is bad, sollte man vermeiden. Siehe FAQ::system is bad
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ FAQ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: