C Am Anfang war 'system("PAUSE");'...

Riker

Lieutenant
Registriert
Jan. 2005
Beiträge
862
... und dann kriege ich doch nen Fehler Oo :D

Hallo erst einmal!

Da ich JAVA inzwischen gut bis sehr gut beherrsche, will ich mich mal an was neuem probieren.
Also fange ich bei C an, um mich dann zu C++ hochzuarbeiten :)

Als IDE nutze ich ECLIPSE. Alles eingerichtet, alles funzt. Perfekt.

Nun zu meinem Problem:

ich habe hier ein ganz einfaches dumpfes "Hello World!" Programm, das wie folgt aussieht:

Code:
#include <stdio.h>
#include <stdlib.h>

int main()
{
	printf ("------------\n");
	printf ("HELLO WORLD!!!!\n");
	printf ("------------\n");

	system("PAUSE");

	return 0;

}

Ja - ob man nun Systemabhängig das "system()" nutzen sollte oder auch nicht, sei mal dahingestellt. getchar() als "Ersatz" ist mir auch schon bekannt.
Aber ich kriege an dieser Stelle nun folgendes Problem (bzw. Fehlermeldung):

'sh: PAUSE: Kommando nicht gefunden.'

Warum das sagen mir die Shell? Öffne ich die Eingabeaufforderung von WINDOWS 7 und gebe "PAUSE" oder "pause" ein, dann sagt er mir brav "Bitte drücken Sie eine beliebige Taste..." - so wie ich es hier auch haben will. Führe ich jedoch das Programm aus (egal ob nun direkt über die Shell oder aus Eclipse heraus), kriege ich immer obige Fehlermeldung und werde langsam verrückt Oo

Kann mir da jemand weiterhelfen?

Grüße und danke!
 
Ich glaub das liegt an Eclipse bzw daran das eclipse den gcc compiler benutzt

Ersetz

system("Pause");

mal mit

cin.get();
 
Ah ok - ja... ich habe den gcc compiler geladen und eingebunden.

Mich hatte der Umstand mit Eclipse auch erst argwöhnisch gemacht. Daher auch mein Versuch die .exe direkt per Windows Konsole zu starten. Dann kam dieser Fehler immer noch und das hatte mich dann ratlos gemacht. Aber der Hinweis mit dem Compiler würde das natürlich erklären...

Guter Hinweis - den habe ich bisher noch nirgends im Netz gefunden ;)

EDIT:

Was ich an 'getchar()' nicht so schön finde:
bei 'system("PAUSE");' kommt die Meldung "Drücken Sie eine beliebige Taste..." und egal was ich drücke, es geht dann weiter.
Bei 'getchar()' kann ich z.B. "asihfdihfsdkjbv" eingeben und sehe es auf der Konsole. Erst wenn ich 'Enter' drücke, geht es weiter...

EDIT2:
'cin.get()' kennt mein Compiler nicht '[...] could not be resolved'... :(
 
Zuletzt bearbeitet:
Mit system(...) führst du externe Prozesse bzw. Befehle aus. Und "pause" scheint es nun einmal nur unter Windows zu geben (Vermutung). Wenn du das erreichen möchtest, was du beschreibst, dann ist deine Vorgehensweise wahrscheinlich die ungünstigste Variante die es gibt.

Vorschlag: Lass die system Anweisungen raus und mach einfach ein printf mit "Bitte beliebige Taste drücken..." und danach ein getchar. Fertig. Und funktioniert auf allen Systemen.

PS: Im übrigen verstehe ich nicht, wieso man eine solche Meldung am Programmende einbauen möchte. Mich würde eine solche Meldung eher nerven.
 
Also bei mir in Codeblocks funktioniert system("pause); mit dem gcc wunderbar.

Kenne mich mit den includes leider kaum aus, habe aber weder stdio.h noch stdlib.h.
Meine includes sind:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
 
Zuletzt bearbeitet:
Naja.. ob es TATSÄCHLICH der Grund ist weiss ich nicht. Ich meine nur dass es den Befehl unter Linux/Unix nicht gibt und ich meine das der Compiler von diesen Systemen portiert ist.
 
@sash2k2: Da bin ich ja so verwirrt - ich nutze WINDOWS und dort gibt es definitiv den Befehl "PAUSE" (wenn ich den auf der Konsole eingebe, kommt das, was ich mir wünsche).
Das es evtl. nicht die schönste und beste Methode ist, sei mal dahingestellt. Mir geht es inzwischen nur noch ums Prinzip - dem "Warum?"! :D

Wieso ich es einbaue?: weil ansonsten ein Fenster für ca. 0,3 Sekunden geöffnet und dann wieder geschlossen wird. In dieser Zeit kann auch ich nicht "Hello World!" lesen - dabei weiß mein Hirn bereits, dass es dies lesen müsste... :D

EDIT:

nochmals bzgl 'getchar()':

Was ich an 'getchar()' nicht so schön finde:
bei 'system("PAUSE");' kommt die Meldung "Drücken Sie eine beliebige Taste..." und egal was ich drücke, es geht dann weiter.
Bei 'getchar()' kann ich z.B. "asihfdihfsdkjbv" eingeben und sehe es auf der Konsole. Erst wenn ich 'Enter' drücke, geht es weiter...

Bei 'getchar()' muss ich nunmal keine beliebige Taste, sondern 'ENTER' drücken... :(
 
Zuletzt bearbeitet:
noxiouzz schrieb:
Habs grad noch mal getestet. Es hängt bei mir von #include <algorithm> ab. Probier das vielleicht mal. (...)
Die ohne .h sind sowieso C++ Header, hier geht es aber um C.
Allgemein: Solch eine Aufforderung kann zwar zum testen ganz praktisch sein, sollte aber im Allgemeinen weggelassen. Werden. Mit einer vernünftigen IDE sollte es auch nicht nötig sein.
Und portabel sind die Aufrufe mit system(...) auch nicht, also wenn dann mit einer der genannten Alternativen arbeiten.
 
Mit system() wird ein Programm ausgeführt. Ein Programm "PAUSE" gibt es aber nicht. PAUSE ist ein eingebauter Befehl der Shell bzw. Eingabeaufforderung. Diese musst du starten und ihr den Befehl PAUSE als Parameter mitgeben. Also: "CMD /C PAUSE" sollte das Gewünschte leisten.
 
"CMD /C PAUSE" hat das gewünschte Ergebnis geliefert. Danke!

Was macht an dieser Stelle denn das '/C' genau?



Warum ich mit C und nicht gleich C++ beginne?
Ich würde mich auch gerne in dieser Sprache auskennen und umsehen. Ist ja nun nicht so, dass es mich eine Ewigkeit kosten wird ;)

Grüße!


EDIT:

Habs schon rausgefunden:
ein "CMD /?" auf der Windows-Konsole erklärt einem direkt alles ;)


Grüße und danke nochmals!
 
Zuletzt bearbeitet:
Riker schrieb:
Ja - ob man nun Systemabhängig das "system()" nutzen sollte oder auch nicht, sei mal dahingestellt. getchar() als "Ersatz" ist mir auch schon bekannt.
Aber ich kriege an dieser Stelle nun folgendes Problem (bzw. Fehlermeldung):

'sh: PAUSE: Kommando nicht gefunden.'!

Soviel dazu:rolleyes:
 
Was ich an 'getchar()' nicht so schön finde:
bei 'system("PAUSE");' kommt die Meldung "Drücken Sie eine beliebige Taste..." und egal was ich drücke, es geht dann weiter.
Bei 'getchar()' kann ich z.B. "asihfdihfsdkjbv" eingeben und sehe es auf der Konsole. Erst wenn ich 'Enter' drücke, geht es weiter...
Falls du den Header "conio.h" hast, kannst du die Funktion "getch()" verwenden. Diese Funktion braucht kein Enter, sondern eben nur eine beliebige Taste.

Beispiel:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    printf( "Hello World!\n\n" );

    printf( "Press any key to exit . . . " );
    getch();

    return 0;
}

Dieser Header ist nicht Teil der C-Standard Library und ist auch nicht plattformunabhängig, aber ich denke, dass das mit dem GCC auf Windows funktionieren sollte.

Gruß
BlackMark
 
Zurück
Oben