[C] MatrixCode Schleife (mit Tastendruck verlassen)

mmp05

Ensign
Dabei seit
Okt. 2005
Beiträge
209
MatixProgramm ist in keinem Sinne mit Matrizen zu verstehen ... ich hasse diese Dinger :)

Ihr alle Kennt den FILM-Matrix-Code ... ich habe ihn wieder zum leben erweckt :cool_alt:

Mein Problem war, dass ich die Whileschleife mit einer sehr hohen Zahl wiederholen ließ und das Prog sich manchmal ganicht mehr schließen ließ :(
Das Programm sollte z.B. mit eingabe von der Leertaste oder EIngabetaste beendet werden können.

Hier der Code (Testes Ihn im VollbildModus):

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

int main (void)
{
char sZeichen[128];
int i, RandZahl;
	//Farbe setzten
	HANDLE hConsole;
	hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleTextAttribute(hConsole, 10); 
	
	//Array mit Sonderzeichen füllen	
	for (i=0; i <= 128 ; i++)
	{
	 	sZeichen[i] = 0x80+i;	
	}
	
	//Radom setzen
	srand((unsigned)time(NULL));

	//Hier ist das Problem ....
	//Ich will dass das Prog aufhört, wenn ich z.B. aus Enter Klicke
 	while (i <= 1000000000)
 	{
	 	  RandZahl = rand() % 128;
	 	  printf("%c", sZeichen[RandZahl]);	  
    }

  system("PAUSE");	
  return 0;
}
 
Naja, dann musst du halt bei jeder Iteration pruefen ob ein abort-flag gesetzt wurde. Die Frage wie du dieses flag setzt ist dann eine andere... ;)
Und ehrlich gesagt wuesste ich keine Moeglichkeit wie man das einfach loesen kann. Du kannst natuerlich einen Thread erzeugen, der nur auf einen Tastendruck wartet, und dann dieses flag setzt. Alternativ kannst du auch mit Signalen arbeiten, aber das ist alles nicht einfach...
 
Code:
int keyPressed = 0;
while( !keyPressed)
{
  switch( getchar() )
  {
    case ESC:
      keypressed = 1;
  } 
  if( !keypressed )
  {
  // Ausgabe des aktuellen zeichens
  ..
  }
}

Wichtig ist, das die Funktion um festzustellen ob eine Taste gedrückt ist nicht wartet und die Eingabe auch nicht echot. Da hilft ein Blick ins Handbuch. D.h. eventuell musst Du getchar mit einer anderen Funktion ersetzen.

MfG

Arnd
 
Zuletzt bearbeitet:

Ähnliche Themen

Antworten
8
Aufrufe
4.432
M
Antworten
13
Aufrufe
1.875
VikingGe
V
Antworten
2
Aufrufe
1.308
Antworten
6
Aufrufe
4.620
Zurück
Top