Umstieg von VB.NET auf C++ (Linux) - Strings und Integer
-
Hi,
ich habe mir vorgenommen mal endlich C++ zu lernen. Allerdings programmiere ich seit über 20 Jahren in VisualBasic bzw. jetzt VB.NET und bin entsprechend "versaut"

Mit VB.NET werfe ich mit Klassen, Eigenschaften, Methoden, Events etc. regelrecht nur so um mich herum. Keine Probleme
Ich habe mir zwar ein Buch für C++ gekauft wo gleich vorne steht "Kein Vorwissen erforderlich" und der Author fängt wirkich bei Adam und Eva an
aber ich steige bei einer ganz simplen Sache nicht 100%tig durch.Ein ganz simples Beispiel:
Ich möchte mit diesem Code ermitteln, wieviele Zeilen in der Konsole mir mit ncurses zur Verfügung stehen und ausgeben.printw("Zeilen max.: " + ncHelper.ConsoleRowsMax);So, der "geübte" C++'ler unter euch wird sofort erkennen, Quark

Aber ich blicke nicht durch wie ich die Ausgabe am einfachsten machen kann.
Unter VB ist das kein Thema, der "schluckt" das.
Unter C++, musste ich gleich als erstes lernen, wird alles sehr streng genommen, was ja auch okay ist.
printw erwartet (wenn ich das richtig sehe) "const char*".
Meine "Zeilen max.: " entspricht dem ja wohl, aber wie kann ich dahinter eine Integer-Variable ausgeben?Da steige ich einfach nicht durch und mir fehlt da der "rote Faden" irgendwie, wo es "klickt" macht bei mir.
Auch über Google habe ich bestimmt völlig falsch gesucht.
Ach so, die Klasse ncHelper ist von mir. Ist halt eine Übung
Später wollte ich, dass die Klasse einen Event auswirft, wenn sich die Maximale Anzahl der Zeilen in der Konsole verändert hat
Aber ich habe schon gelesen, dass wird auch nicht ganz leicht, wegen Timer. Na mal sehen. Jetzt geht es mir nur darum, zu verstehen, wie ich eine Integer-Variable in einem char* ausgeben kann.Kann mir da bitte einer mal helfen?
Danke!Gruß
AndyEDIT: Und vielleicht hat auch einer ein Buch-Tipp für mich speziell für den Umstieg von VB nach C++. Falls es sowas überhaupt gibt.
-
Ufff, schlechtes Buch.
In C++ geht das übrigens so:
std::cout << "Zeilen max.: " << ncHelper.ConsoleRowsMax;
-
Andy09 schrieb:
So, der "geübte" C++'ler unter euch wird sofort erkennen, Quark :D.
Der "geübte" C++'ler erkennt eher, dass du kein C++ lernst. Was hast du denn für ein Buch?
-
Ethon schrieb:
Ufff, schlechtes Buch.
In C++ geht das übrigens so:
std::cout << "Zeilen max.: " << ncHelper.ConsoleRowsMax;Hallo Ethon,
naja, ich will jetzt das Buch nicht schlecht machen, vielleicht liegt es auch nur an mir

Wie ich die Ausgabe über cout mache, dass habe ich schon begriffen und hinbekommen. Aber über die Funktion printw welches ein const char* erwartet, da habe ich das nicht begriffen wie ich eine Integer-Variable ausgeben kann

Gruß
Andy
-
Gugelmoser schrieb:
Andy09 schrieb:
So, der "geübte" C++'ler unter euch wird sofort erkennen, Quark :D.
Der "geübte" C++'ler erkennt eher, dass du kein C++ lernst. Was hast du denn für ein Buch?
Das Buch heißt "Einstieg in C++" von Arnold Willemer.
Gruß
Andy
-
Ach so, und ich sollte vielleicht noch erwähnen, dass ich als Umgebung auf mein Win7-Rechner die Oracle VirtualBox installiert habe und darauf das "Linux Mint 13". Als IDE verwende ich NetBeans 7.1.2.
Also nix Visual C++ etc.
Ich könnte jetzt natürlich mein Visual Studio Prof. 2010 verwenden, aber ich wollte es direkt unter Linux lernen
Gruß
Andy
-
Andy09 schrieb:
Wie ich die Ausgabe über cout mache, dass habe ich schon begriffen und hinbekommen. Aber über die Funktion printw welches ein const char* erwartet, da habe ich das nicht begriffen wie ich eine Integer-Variable ausgeben kann

Falls wie ich vermute ConsoleRowsMax ein Integer ist, dann verschiebst du mit "Zeilen max.: " + ncHelper.ConsoleRowsMax nur den char Pointer und zeigst irgendwo hin.
std::ostringstream o; o << "Zeilen max.: " << ncHelper.ConsoleRowsMax; printw(o.str().c_str());
-
Ethon schrieb:
Andy09 schrieb:
Wie ich die Ausgabe über cout mache, dass habe ich schon begriffen und hinbekommen. Aber über die Funktion printw welches ein const char* erwartet, da habe ich das nicht begriffen wie ich eine Integer-Variable ausgeben kann

Falls wie ich vermute ConsoleRowsMax ein Integer ist, dann verschiebst du mit "Zeilen max.: " + ncHelper.ConsoleRowsMax nur den char Pointer und zeigst irgendwo hin.
std::ostringstream o; o << "Zeilen max.: " << ncHelper.ConsoleRowsMax; printw(o.str().c_str());Ach, jetzt sehe ich meine(n) Fehler.
Diese Variante hatte ich auch schon probiert. Allerdings mit zwei entscheidenen Fehlern.
z.B. hatte ich mal probiert:printw("ConsoleRowsMax: " + temp.str().c_str());Fand der Compiler nicht wirklich witzig.
Jetzt bimmelt es langsam bei mir. Ja, ich muss wirklich "umdenken"
Danke
Gruß
Andy
-
Die Tipps mit cout kannst du erstmal vergessen, da cout auf den Standardausgabestrom und nicht notwendig auf den Bildschirm schreibt. printw funktioniert wie printf, d.h. als erstes kommt ein Formatstring und dann die Argumente. (Von VB.NET müsstest du String.Format bzw. Console.Write kennen, die ein ähnliches Konzept haben.)
printw("Zeilen max.: %d\n", ncHelper.ConsoleRowsMax);Das sollte in dem Buch aber auch besprochen worden sein!
Alternativ das Kapitel mit ncurses überblättern, das hat mit dem C++-Lernen an sich überhaupt nichts zu tun und bringt auch nur was, wenn du unter Linux Programme mit Bildschirm- und Tastatursteuerung schreiben willst.