PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Screenclear bzw. Form Feed in C



roadracer
16-02-2010, 21:43
Hallo,
bitte verzeiht mir Anfängerfehler oder derartiges, ich bin Newbie und befasse mich seit einiger Zeit mit C. Also, ich bin auf der Suche nach einer plattformunabhängigen Lösung (Linux, Windows; beide GCC) um in einem C Programm (Text-basierend) den Bildschirm zu leeren (screenclear). Am besten natürlich aus den Stammheaders (oder wie heißt es? Headern?). Ich habe schon Tante Google gefragt und die Forumssuche benutzt. Dabei bin ich bereits auf folgende, aber unzureichende Lösungen gestoßen:
1. Mit der Funktion scrclr() im Header conio.h. Problem: Gibt's nur für Windows (in VS, glaub' ich).
2. Mit der Funktion system("clear") bzw. system("cls"). Da wird aber wohl das Programm (clear, cls) nicht richtig mit ein-kompiliert. Daher momentan nur Behelfslösung.
3. Mit der Funktion printf("\f") (form feed). Hört sich eigentlich ja ganz gut an, aber irgendwie bekomme ich nur einen doppelten Zeilenumbruch:
nick@Morphy:~/Skripte> ./test

nick@Morphy:~/Skripte> Was mach ich da falsch???

Meiner Meinung ist Lösung 3 wohl das beste, da es all meinen Kriterien entspricht. Nur mach ich eben irgendwas falsch.

VG

roadracer

roadracer
17-02-2010, 17:29
So,
ich hab die Lösung gefunden. Man braucht nur die Befehle


printf ("\033[2J");
printf ("\033[1;1H");

auszuführen. Damit kann man sich auch eine klasse Funktion schreiben


int clear()
{
printf ("\033[2J");
printf ("\033[1;1H");
return 0;
}

Das hab' ich von http://snippets.dzone.com/posts/show/2734

VG

panzi
18-02-2010, 00:07
wozu das return 0?

roadracer
18-02-2010, 17:17
Da muss ich ehrlich sagen, dass weiß ich selber nicht. :D Wie gesagt, ich bin Newbie in C und in Shell gibt's sowas halt nicht. Ich habe das Handbuch CProgrammierung von Wikibooks (http://de.wikibooks.org/wiki/C-Programmierung) gelesen, und das return 0; übernommen. Als Anfänger gibt's wichtigere Sachen als return 0; zu verstehen. Ich hab auch schon mal etwas von einem Makro EXIT_SUCCES gehört, mich aber damit und mit Makros allgemein nicht weiter beschäftigt.
Ich bitte also um Nachsichtigkeit für meine "Leichgläubigkeit";)

VG

panzi
18-02-2010, 20:55
Ein Rückgabewert ist i.d.R. zu etwas gut. Etwa um den Aufrufer mitzuteilen ob ein Fehler passiert ist oder bei einer mathematischen Funktion der errechnete Wert. In diesem Fall würde ich es einfach weg lassen:


void clear()
{
printf ("\033[2J");
printf ("\033[1;1H");
}


Das return 0 in der main Funktion signalisiert ja auch dem Aufrufer des Programms, das alles ok lief. Die main Funktion ist eben mit einer Signatur, die ein int zurück gibt, definiert. Bei deinen eigenen Funktionen darfst du das machen wie du willst.

datalux
02-03-2010, 10:18
Das mit den Makros EXIT_SUCCESS, EXIT_FAILURE hat mit den Rückgabewerten auf verschiedenen Systemen zu tun.
Du bindest einfach die stdlib.h ein und dann kannste auf die Werte zugreifen und solltest dich nicht mehr um die Systeminterne-Darstellung kümmern müssen. ;)


#include <stdlib.h>