Forum: PC-Programmierung C - printf-Ausgabe zum blinken bringen?


von Benedikt S. (Gast)


Lesenswert?

Guten Tag allerseits,

Ich experimentiere zur Zeit ein wenig mit C rum und stehe momentan vor 
dem Problem, dass ich kein brauchbares tutorial finde, das zeigt, wie 
man eine consolen-ausgabe zum blinken/farbwechseln bringt. es gibt 
tutorials, in denen verschiedene leute immer wieder funktionen aus der 
<conio.h> dafür verwenden und mit geringstem Aufwand Erfolg haben. 
allerdings benutze ich CodeLite mit dem minGW compiler und der kennt 
anscheinend den Großteil der conio.h datei nicht. so hab ichs jedenfalls 
jetzt einige male gelesen.

kennt ihr einen einfachen weg, printf - Ausgaben zum blinken zu bringen?
ich wäre sehr dankbar.

Und wegen farbiger Darstellung von Text habe ich eine Funktion aus der 
<windows.h> gefunden, die ganz gut funktioniert. Allerdings finde ich da 
nichts, womit ich die Hintergrundfarbe der Console ändern kann. Außerdem 
scheint es so, als würde sich nicht nur die Farbe der chars ändern, 
sondern auch die Hintergrundfarbe im Bereich der Chars. gibts da evtl 
noch bessere Lösungen?

beste Grüße

Bene

von Johannes S. (Gast)


Lesenswert?

Mit printf kann man nur Zeichenketten ausgeben, das 'Blinken' sind 
Sondercodes (Sequenzen) die das Anzeigegerät interpretieren und 
ausführen muss. D.h. du brauchst ein Terminalprogramm das so etwas wie 
VT100/VT220 emuliert oder ANSI Sequenzen kennt.
https://de.wikipedia.org/wiki/VT100
http://ascii-table.com/ansi-escape-sequences-vt-100.php
So ist jedenfalls für eine Ausgaben über eine serielle Schnittstelle. 
Für ein Konsolenprogramm weiss ich grad nicht, ist zulange her...

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Benedikt S. schrieb:
> kennt ihr einen einfachen weg, printf - Ausgaben zum blinken zu bringen?

Unter unixoiden Betriebssystemen sendet man passende ESC-Sequenzen aus 
dem VT100/ANSI-Befehlssatz.

Unter Windows geht das nicht, da benötigt man Funktionen aus der 
Win32-API zur direkten Ansteuerung der Console.

https://docs.microsoft.com/en-us/windows/console/console-functions

Mit SetConsoleTextAttribute kannst Du Vorder- und Hintergrundfarbe 
einstellen:
https://docs.microsoft.com/en-us/windows/console/setconsoletextattribute

Von sich aus blinkender Text ist nicht vorgesehen, Du kannst das aber 
nachbilden, indem Du das Textattribut des Textes, der blinken soll, in 
einer Timerfunktion o.ä. zyklisch änderst.

von A. S. (Gast)


Lesenswert?


von Johannes S. (Gast)


Lesenswert?


von Jim M. (turboj)


Lesenswert?

Benedikt S. schrieb:
> dem minGW compiler

Also bei mir ist im Mingw/MSYS2 ein "ncurses" mit dabei, das nutzt man 
unter Unix für "schöne" Textausgaben (mit Fensterrahmen etc). Damit 
erstellte Konsolenprogramme sollten ohne große Änderungen auch unter 
Unix/Linux tun.

von 2⁵ (Gast)


Lesenswert?

1
void main(int argc, char **argv)
2
{
3
    printf("\e[5mBlinken\e[mNormal\n");
4
}

von 2⁵ (Gast)


Lesenswert?

Gilt für Linux!

von Yalu X. (yalu) (Moderator)


Lesenswert?

2⁵ schrieb:
> Gilt für Linux!

Das ist nicht ganz korrekt.

Die genannte Escape-Sequenz funktioniert für alle Terminals und
Konsolen, die VT100-kompatibel oder ECMA-48- bzw. ISO-6429-konform sind.
Die meisten Linux-Konsolen entsprechen diesen Normen. Aber auch die
MSDOS-/Windows-Konsole unterstützt die meisten dieser Escape-Sequenzen,
allerdings sind sie dort per Default deaktiviert. Bei älteren Versionen
werden sie durch Laden des Moduls ANSI.SYS aktiviert, bei Windows 10
muss dazu irgendetwas in der Registry gefrickelt werden.

von Rolf M. (rmagnus)


Lesenswert?

Unter DOS ging das auch noch. Da gab es die ANSI.SYS, die man laden 
konnte, damit die Escape-Sequenzen auch dort gehen. Unter Windows wurde 
das aber ersatzlos gestrichen, wobei anscheinend in irgendeinem Aufguss 
von Windows 10 der Support dafür wieder nachgereicht wurde. Siehe dazu:
https://docs.microsoft.com/en-us/windows/console/console-virtual-terminal-sequences
Man braucht also bei Microsoft entweder ein uraltes DOS oder das 
allerneueste Windows, um Escape-Sequenzen nutzen zu können. Da ist dann 
übrigens auch blinken dabei.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.