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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Benedikt S. (Gast)


Bewertung
0 lesenswert
nicht 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. (jojos)


Bewertung
0 lesenswert
nicht 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...

: Bearbeitet durch User
von Rufus Τ. F. (rufus) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht 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. (achs)


Bewertung
0 lesenswert
nicht lesenswert

von Johannes S. (jojos)


Bewertung
0 lesenswert
nicht lesenswert

: Bearbeitet durch User
von Jim M. (turboj)


Bewertung
0 lesenswert
nicht 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)


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

von 2⁵ (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Gilt für Linux!

von Yalu X. (yalu) (Moderator)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.