[C++] 2 Cout aber gleiche Zeile, Zeilenfarbe ändern Konsole

So Danke Leute für eure vielen schnellen Antworten, werd mich mal ransetzen und es ausprobieren.
 
Dieser Thread ist jetzt zwar schon etwas älter.... aber weil ich genau diese gleichen beiden Probleme habe frisch ich jetzt hier mal etwas auf :) :D

Gibt es zu diesem ersten Problem hier angesprochenen Problem schon irgendeine Lösung?
Mein Problem mit dem Cout ist ehr dieses:
Das ist n kleines Kopfrechenprogramm. Mein Problem ist, dass das "Richtig" aus dem If oben angehängt werden soll nach dem cin>>ErgebnisUser, da ist ja eig auch kein Zeilenumbruch drin, aber eben durch das Bestätigen des Ergebnises via "Enter" springt der Cursor weiter..
Hab jetzt auch mal eine Zeit lang versucht und rumgespielt.... aber durch das Enter nach einer cin-Eingabe springt der Cursor nun mal eine Zeile runter....
GIbt es eine Möglichkeit dem Cursor zu sagen "Springe ans Ende der letzten Zeile!"..... oder so?! :)

Und zum zweiten Problem mit der Lösung von Marshal
Zum Farbproblem:
Jede Zeile verschieden färben ist etwas aufwändiger, und wenn du ein Einsteiger bist, auch nicht, bzw. nur schwer zu verstehen, wie und was genau getan wird, deshalb schreibe ich jezt einfach wie du es anzuwenden hast, wenn ich genaueres dazu erklären soll, kann ich das nach Bedarf ja gerne tun;)
Gibt es irgendwo eine Tabelle wo man sehen kann welche Farben es alles für die Konsolenausgabe gibt?
Ich habe z.B.
FOREGROUND_WHITE
FOREGROUND_BLACK
FOREGROUND_SILVER
FOREGROUND_YELLOW
und noch ein paar ausprobiert, aber die gehen nicht.


Würde mich über jede Hilfe sehr freuen! ;-)
 
Hi:)

Sorry dass ich mich erst jetzt melde, war unterwegs und vom iPhone ist es nicht so dolle eine strukturierte Antwort zu geben.

Zum ersten Problem lautet deine Lösung: SetConsoleCursorPosition Function

laut MSDN Verwendung wie folgt:
C++:
BOOL WINAPI SetConsoleCursorPosition(
  __in  HANDLE hConsoleOutput, //Handle zu deiner Instanz
  __in  COORD dwCursorPosition //COORD ist eine Struktur, bestehend aus X und Y, somit kannst du den Cursor überall hin setzen
);

Zum Zweiten:
Hier alle Attribute (Quelle, wie immer MSDN):
Code:
Attribute			Meaning
FOREGROUND_BLUE			Text color contains blue.
FOREGROUND_GREEN		Text color contains green.
FOREGROUND_RED			Text color contains red.
FOREGROUND_INTENSITY		Text color is intensified.
BACKGROUND_BLUE			Background color contains blue.
BACKGROUND_GREEN		Background color contains green.
BACKGROUND_RED			Background color contains red.
BACKGROUND_INTENSITY		Background color is intensified.
COMMON_LVB_LEADING_BYTE		Leading byte.
COMMON_LVB_TRAILING_BYTE	Trailing byte.
COMMON_LVB_GRID_HORIZONTAL	Top horizontal.
COMMON_LVB_GRID_LVERTICAL	Left vertical.
COMMON_LVB_GRID_RVERTICAL	Right vertical.
COMMON_LVB_REVERSE_VIDEO	Reverse foreground and background attributes.
COMMON_LVB_UNDERSCORE		Underscore.

Hoffe ich konnte dir helfen:)
 
Zuletzt bearbeitet von einem Moderator:
Hi:)
Zum ersten Problem lautet deine Lösung: SetConsoleCursorPosition Function

laut MSDN Verwendung wie folgt:
C++:
BOOL WINAPI SetConsoleCursorPosition(
  __in  HANDLE hConsoleOutput, //Handle zu deiner Instanz
  __in  COORD dwCursorPosition //COORD ist eine Struktur, bestehend aus X und Y, somit kannst du den Cursor überall hin setzen
);

Ich danke Dir für die Antwort!! ;-)

Also damit schon mal zweites Problem gelöst :)

Zum ersten nochmal.... ja das SetConsoleCursorPosition hab ich gesehen..... aber bin daraus nicht wirklich schlau geworden....
Soweit ich das verstanden habe kann man damit X-undY-Koordinaten geben wo der Cursor dann hinspringt.....
aber wenn jetzt in einem Programm dieser Punkt wo der Cursor hinspringen soll sich immer änder..... was dann Wie schon bei dem Threadstarter will ich in meinem Programm zu der gegebenen Eingabe in der gleichen Zeile sagen ob richtig oder falsch.....
Hmmm.... ist sowas überhaupt in der Konsole möglich oder erwarte ich jetzt zu viel von der guten alten Windows-Konsole:confused:
 
Zuletzt bearbeitet von einem Moderator:
Hi.

Nun ich weis nicht ob es fertige Funktionen gibt um die letzte cursorposition zu ermitteln, ansonsten kannst du dich doch eine Funktion basteln, die den Cursor jeweils setzt.
Kann nich mal später zu Hause schauen ob's da was gibt.

MfG Marschal
 
Die Funktion GetConsoleCursorPosition direkt gibts nicht-
dafür aber GetConsoleScreenBufferInfo, das unter anderem die Koordinaten liefert
 
Marschal hat gesagt.:
Hi.
Nun ich weis nicht ob es fertige Funktionen gibt um die letzte cursorposition zu ermitteln, ansonsten kannst du dich doch eine Funktion basteln, die den Cursor jeweils setzt.
Kann nich mal später zu Hause schauen ob's da was gibt.

MfG Marschal
Hmmm......ok werd ich mal schauen ob ich das hinkrieg..... bin halt noch nicht sooo lange dabei mit programmieren, vor allem C++....... ich versuchs!

Wäre super wenn Du etwas schauen kannst wenn Du etwas freie Zeit hast, danke Dir ;-)


sheel hat gesagt.:
Die Funktion GetConsoleCursorPosition direkt gibts nicht-
dafür aber GetConsoleScreenBufferInfo, das unter anderem die Koordinaten liefert
Ich hab mir das GetConsoleScreenBufferInfo mal bei msdn angeschaut...... bin daraus nicht wirklich schlau geworden...... was liefert diese Funktion für einen Wert?
Hab irgendwie nicht den Eindruck, dass es die Koordinaten der letzten Zeile schickt..... bzw. des letzten Zeichens in der letzten Zeile...... oder
Das Beispiel auf der Seite hab ich auch ausprobiert, aber das funktioniert bei mir nicht so richtig.... also startet zwar und alles.... aber da steht dann "Cannot scroll; the window is too close to the top." Hmmmm...........
 
Hi, ich knüpfe mal an shell an:

C++:
//laut MSDN
typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
  COORD      dwSize;
  COORD      dwCursorPosition;
  WORD       wAttributes;
  SMALL_RECT srWindow;
  COORD      dwMaximumWindowSize;
} CONSOLE_SCREEN_BUFFER_INFO;

hier siehst du, dass die Funktion eine Struktur zurück gibt. In der Struktur hast du verschiedene Member. Unter anderen deine Gesuchte Position des Cursors:
C++:
COORD      dwCursorPosition;
Wie du siehst ist der Typ COORD. COORD ist auch wiederum eine Struktur die die X und Y Coordinaten beinnhaltet.

Ich bin mir nicht ganz sicher welcher Operator für Strukturen verwendet wird, aber Microsoft sagt dir das schon.
Logisch müste es dan wie folgt aussehen um die Position des Cursors heraus zu finden:
C++:
 CONSOLE_SCREEN_BUFFER_INFO csbiInfo;

SHORT oldX = csbiInfo.dwCursorPosition.X;
SHORT oldY = csbiInfo.dwCursorPosition.Y;

hab den Code jetzt nicht programmiert. Hoffe du kommst klar, ansonsten hau ichs auch gern noch mal schnell im Compiler durch;)

MfG Marschal
 
Zuletzt bearbeitet von einem Moderator:
Ohje....also mit Strukturen hab ich bisher eigentlich noch gar nix gemacht...... nur mit Klassen.... dachte immer Strukturen wären so ne alte C-Geschichte, die von Klassen abgelöst wurden....:confused:

Wenn das für Dich wirklich nicht zu viel Arbeit ist, dann.....
hab den Code jetzt nicht programmiert. Hoffe du kommst klar, ansonsten hau ichs auch gern noch mal schnell im Compiler durch;)
...wäre es wirklich super wenn da ein ganz kleines Beispielirgendwas durch den Compiler jagen würdest ;)
Vielleicht kann ich das dann an einem Beispiel wenn ich sehe wie es funktioniert besser verstehen. Mit Debugger und so......

Danke! MFG :)
 
Zurück