Automatisches schließen C++

10/03/2011 02:15 roloremo#1
Es gibt ja anscheinend das Problem dass sich die Konsole manchmal direkt nach der ausgeführten Aktion wieder schließt, obwohl manche gerne noch das Endergebnis sehen würden.

Jetzt hab ich ein bisschen mit Google gesucht und bin auf das gestoßen:
Code:
#include <conio.h>
#include <windows.h>
...
{
void wait ();

    	// Leere Puffer
    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
    	// Lese den nächsten Tastendruck
    getch();
}
Kann man das als adäquaten Ersatz für system("pause") nehmen? Es geht mir besonders um die PLattformunabhängigkeit und da ich erst gerade mit C++ angefangen habe hab ich da noch nicht wirklich die Ahnung von.

MfG
10/03/2011 02:36 BlackWu#2
Quote:
Originally Posted by roloremo View Post
Es gibt ja anscheinend das Problem dass sich die Konsole manchmal direkt nach der ausgeführten Aktion wieder schließt, obwohl manche gerne noch das Endergebnis sehen würden.

Jetzt hab ich ein bisschen mit Google gesucht und bin auf das gestoßen:
Code:
#include <conio.h>
[B]#include <windows.h>[/B]
...
{
void wait ();

    	// Leere Puffer
    FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE));
    	// Lese den nächsten Tastendruck
    getch();
}
Kann man das als adäquaten Ersatz für system("pause") nehmen? Es geht mir besonders um die PLattformunabhängigkeit und da ich erst gerade mit C++ angefangen habe hab ich da noch nicht wirklich die Ahnung von.

MfG
?!
Edit:
Code:
#include <iostream>



void wait()
{
      std::cin.clear();
      std::cin.get();
}
int main(void)
{
      wait();
}
Sollte dein Problem lösen.
10/03/2011 12:35 roloremo#3
Und was bedeutet das jetzt? Bin noch nicht so wirklich weit, vielleicht kannste mir ja mal die Funktionen erklären und ein Beispiel zeigen, zB an einem eifachen Hello World Programm
10/03/2011 13:13 XxharCs#4
Code:
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;


int main(int argc, char* argv) 
{
	printf("Hallo Welt !\n");
	cin.get();
	return 0;
}
10/03/2011 13:30 roloremo#5
Quote:
Originally Posted by XxharCs View Post
Code:
#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;


int main(int argc, char* argv) 
{
	printf("Hallo Welt !\n");
	cin.get();
	return 0;
}
Und da hab ich das Problem dass er "stdafx.h" nicht kennt oO
10/03/2011 14:55 XxharCs#6
Quote:
Originally Posted by roloremo View Post
Und da hab ich das Problem dass er "stdafx.h" nicht kennt oO
#include "stdafx.h" inkludierst du nur dann wenn du einen vorkompilierten header hast.
falls du leeres projekt machst, dann brauchst das #include "stdafx.h" nicht.
10/03/2011 15:49 roloremo#7
Achso ok, danke ;)
10/03/2011 16:04 xNopex#8
Quote:
#include <conio.h>
Quote:
Es geht mir besonders um die PLattformunabhängigkeit
Fällt euch was auf :rolleyes:
10/03/2011 16:23 roloremo#9
Vielleicht dass es in Linux nicht funzt?
10/03/2011 20:09 MrSm!th#10
Doch, genau das.
Der C/C++ Standard ist unabhänhig, im Gegensatz zu system("").

Er meinte vermutlich, dass man so oder so auf anderen Plattformen neu kompilieren müsste, da natürlich eine .exe auf Linux nicht geht.
Kann ihn aber auch missverstehen :p

Im Grunde ist es aber immer falsch, eine Tasteneingabe zu erwarten, damit es auf bleibt.
Normalerweise öffnet man das Programm über die Konsole, dann bleibt das Fenster eh auf.

Um mal das zu tun, was die anderen nicht getan haben:

cin ist das globale Objekt für den Standard-Inputstream. Sprich, normalerweise die Tastatur. get ist eine Methode, die das Programm solange blockt, bis eine Taste gedrückt wird (bzw. korrekt, bis der Stream gefüllt wird).
clear ist eine Methode, die den Stream Buffer leert, sodass keine vorherigen Eingabe aus dem Programm die Funktion sofort abbrechen lassen.
Das geht, soweit ich weiß, auch mit cin.ignore().
10/03/2011 20:27 Akorn#11
Er meint wohl eher das er die WinApi funktionen "FlushConsoleInputBuffer" und "GetStdHandle" benutzt.
10/05/2011 18:50 xNopex#12
Nein, erstens schreibst du in der Überschrift, dass du in C++ programmierst. Dann frage ich mich, wieso du einen C-Header inkludierst. Desweiteren ist conio.h kein Standard-Header. Näheres dazu bei Wikipedia und Co. Die Lösung, die ich auch bevorzugen würde, wäre in der Tat "cin.get()". Aber dann bitte nicht so:

Code:
#include <iostream>

int main(int argc, char* argv) 
{
	printf("Hallo Welt !\n");
	std::cin.get();
	return 0;
}
*kotz*

sondern so:
Code:
#include <iostream>
#include <conio.h>

int main(int argc, char* argv) 
{
	std::cout << "Hallo Welt\n";
	std::cin.get();
	return 0;
}