Sachen in C aufblinken lassen

u-m3n

Mitglied
Wir haben die Aufgabe gekrickt ein Ergebniss 3mal aufblinken zulassen... aber ich krieg es nicht hin.

Ich hab es mit Schleifen und was weiss ich noch Probiert... könnt ihr mir mal helfen...
wie man etwas aufblinken lassen kann... und wie ich die anzahl des blinkens änder... das wäre super...

Danke im Vorraus
 
moin


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

int main(int argc, char* argv[])
{

	COORD coord;
	coord.X=10;
	coord.Y=10;

	HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);

	
	while(1)
	{
		SetConsoleCursorPosition(hCon, coord);
		printf("MUH");
		Sleep(500);

		SetConsoleCursorPosition(hCon, coord);
		printf("   ");
		Sleep(500);
	}
	
	return 0;
}


mfg
umbrasaxum


P.S.: das wird morgen ein kinderspiel!!
 
Jo danke :D

Und das das morgen ein Kinderspiel wird... hab ich auch im Orin :)... naja wir lassen es einfach auf uns zukommen :D
 
Mit dem Code bist Du aber auf das WinAPI angewiesen - also kriegt Ihr da leichte Probleme, wenn das auch unter Linux laufen soll. ;)

Alternativ zu der API-Methode könnt Ihr auch direkt in den Grafikspeicher schreiben, damit läuft das auch auf anderen x86-Systemen.

Zum kompletten Löschen des Bildschirms könntet Ihr z.B. die folgende Funktion benutzen:
Code:
void clear_screen() // Gesamten Bildschirm löschen
{
  // Pointer auf den Grafikspeicher der Konsole setzen
  char *video = (char *) 0xb8000;
  unsigned int i=0;
  // Jedes Zeichen der Konsole durchgehen (80 Spalten, 25 Zeilen, 2 Byte pro Stelle)
  while(i < (80*25*2))
  {
    // Zeichen löschen
    video[i] = ' ';
    i++;
    // zweites Byte der Stelle löschen
    video[i] = 0x07;
    i++;
  };
};

... aber die Variante mit den API-Funktionen reicht auch eigentlich. :)
 
Code:
#include <stdio.h>
#include <windows.h>

int main(int argc, char **argv) 
{
	while(true)
	{
		printf("\rTest Text...\r");
		Sleep(250);
		fflush(stdout);
		printf("\t\t");
		fflush(stdout);	
		Sleep(250);		
	}
	
	return 0;
}
noch eine methode... und um die Sleep() funktion, lässt sich auch drumrumkommen(Grammatik?)...
 
moin


@Lirion
nicht schlecht. aber
1. den ganzen bildschirm zu löschen dauert relativ lange. da ist es schon besser nur einen bestimmten teil zu löschen.
2. es scheint unter xp nicht mehr zu laufen!



mfg
umbrasaxum
 
1. den ganzen bildschirm zu löschen dauert relativ lange. da ist es schon besser nur einen bestimmten teil zu löschen.
Normalerweise eigentlich nicht, aber falls das trotzdem Probleme gibt, kann man das ja immer noch einschränken. Man muss dazu ja nur die Schleifendurchläufe entsprechend ändern.
2. es scheint unter xp nicht mehr zu laufen!
Naja, ist schon möglich, wenn Windows XP direkte Zugriffe auf geschützte Speicherbereiche verbietet. Zum einen geht das sowieso nur bei Konsolenanwendungen, weil diese einen anderen Bereich für den Grafikspeicher haben als grafische Oberflächen. Zum anderen ist es ja auch teilweise etwas unsicher, wenn man anfängt, direkt in dem Grafikspeicher herumspielt...
 
moin


@Lirion
Was kann ich alles machen wenn ich direkt in den Speicher schreibe? Und kann ich in wie du es mit "char *video = (char *) 0xb8000;" gemacht hast immer vorgeben wohin ein Pointer zeigen soll?


mfg
umbrasaxum
 
Wenn Du in den Grafikspeicher schreibst, kannst Du da logischerweise einfach Zeichen ausgeben. Die Adresse hab ich in dem Beispiel als Hex-Wert übergeben (0xb8000).
Sinn des Ganzen ist eigentlich, dass man dabei nicht mehr auf die printf-Funktion oder das cout-Objekt angewiesen ist - diese sind nämlich abhängig von einem installierten Betriebssystem.
 
Zurück