PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C]: Rahmen im Konsolenprogramm zeichnen


mf_2
2007-12-10, 14:26:01
Hallo zusammen,

Ich schreibe gerade eine Windows-Konsolenanwendung für C.
Diese soll zwecks grafischer Aufwertung einen Rahmen haben, aus Rauten bestehend. Das ist auch soweit kein Problem, nur stört es, dass scanf_s nach der Eingabe automatisch einen Zeilenumbruch mit Wagenrücklauf erzeugt.
Wie kann ich das nun verhindern?
Mir ist klar, dass scanf_s den Druck der Enter-Taste als Eingabeende braucht, aber wie kann ich den CRLF unterdrücken? Da gibt es doch sicher irgendwas, oder?

Gruß,
mf_2

Superguppy
2007-12-10, 14:47:34
Probiere mal fgets() oder getch() aus. Wenn du übrigens einen schönen Rahmen machen willst, solltest du dir mal die zweite Hälfte der ASCII-Tabelle näher ansehen. Da gibt es für diesen Zweck recht ansehnliche Rahmenzeichen.

mf_2
2007-12-11, 10:51:15
fgets() will was aus einer Datei. getch() gibts nicht (non-Standard), aber ich habe es mal mit getchar() versucht. Das verhält sich wie getch(), aber es hilft mir nicht weiter. Wie gebe ich damit den rechten Teil des Rahmens aus?
Das geht nicht:

printf("# Bitte geben sie bis zu 255 Ziffern ein: ");
while(tempchar!=10)
{

tempchar=getchar();

}
//scanf("%255s",eingabe);
printf(" #\n");


Der auskommentierte Teil war mein ursprünglicher Versuch.
Was mache ich falsch?

Legolas
2007-12-11, 12:48:24
fgets() will was aus einer Datei

stdin, stdout und stderr sind auch Filedeskriptoren. Du kannst also fgets auch damit benutzen.

Superguppy
2007-12-11, 18:35:49
getch() gibts nicht (non-Standard), aber ich habe es mal mit getchar() versucht.
Der Unterschied ist glaube ich, dass getchar() ein Echo auf der Konsole macht und getch() nicht.

mf_2
2007-12-11, 20:41:31
getch() geht in meiner Visual Studio 2005 Umgebung nicht, da kommt ein Fehler "unknown identifier: getch" oder so ähnlich.

Superguppy
2007-12-11, 22:07:11
#include <conio.h>

Ah, und ich glaube der Compiler motzt dann, dass der Befehl jetzt _getch() heißt. Wenn ich mich recht erinnere.

mf_2
2007-12-13, 12:35:43
Ich habe es jetzt gelöst indem ich nach der Ausgabe des Rahmens via printf das ASCII Steuerzeichen mit dem Code (dezimal) 13 aufrufe, das ist ein Wagenrücklauf. Dann schreibe ich den linken Rahmenteil der Zeile nochmal und dahinter kommt dann direkt scanf().
In der nächsten Zeile (der Zeilenvorschub kommt ja von scanf()) kommt dann gleich mal ein Wagenrücklauf und der Rahmen wird weitergeschrieben.