Problem bei Tannenbaumprogramm
-
Dieser Beitrag wurde gelöscht!
-
if (h >= 3, h <= 15)
das macht sicher nicht, was du denkst.Benutze einen Debugger und schau dir an, was dein Programm tut.
Bis Weihnachten ist ja noch etwas Zeit
-
Dieser Beitrag wurde gelöscht!
-
Wie viel ist denn Leerzeichen mal Sternchen deiner Meinung nach?
-
Dieser Beitrag wurde gelöscht!
-
@luis keine Ahnung was @SeppJ gemeint hat. Aber rechne mal
'*'
*'*'
und denk darüber nach ob das irgendeinen sinn ergibt.
-
Meine Güte, macht es einem Anfänger doch nicht schwerer, als es ist.
In C++ ist char ein Typ, der im Prinzip wie eine Zahl funktioniert, aber bei der Ausgabe das Zeichen ausgibt, dessen Code der Zahl entspricht. Wenn du
char c = ' ';
schreibst, dann wird c der Zeichencode vom Leerzeichen zugewiesen. Bei ASCII ist das 32. Dann multiplizierst du c mit der eingelesenen Zahl h. Also z.B. bei einer Höhe von 7 würdest du nun 7*32 rechnen und das Ergebnis wieder in den char-Zahlenbereich abschneiden und als Zeichen interpretieren. Das willst du nichtFür variabel lange Zeichenketten nimmt man in C++ den Typ std::string. Schau dir den Constructor (2) hier an: https://en.cppreference.com/w/cpp/string/basic_string/basic_string
Mitauto s = std::string(10, 'x'); std::cout << s << "\n";
kannst du dir z.B. einen String mit 10 'x'en erzeugen und ausgeben.
Oder du gibst die Zeichen mit einer for-Loop aus:for (int i = 0; i < 10; ++i) cout << 'X';
-
@wob sagte in Problem bei Tannenbaumprogramm:
In C++ ist char ein Typ, der im Prinzip wie eine Zahl funktioniert
sorry, aber so ist es etwas irreführend. char ist ein signed oder unsigned integer type. unterscheidet sich in genau garnichts von anderen integer types.
-
@Swordfish sagte in Problem bei Tannenbaumprogramm:
@wob sagte in Problem bei Tannenbaumprogramm:
In C++ ist char ein Typ, der im Prinzip wie eine Zahl funktioniert
sorry, aber so ist es etwas irreführend. char ist ein signed oder unsigned integer type. unterscheidet sich in genau garnichts von anderen integer types.
Sonderbehandlungen durch jede Ausgabefunktion findest du nicht erwähnenswert? Der ist ein großer Teil von Funktion.
-
@SeppJ sagte in Problem bei Tannenbaumprogramm:
durch jede Ausgabefunktion
doch nur bei den io und sstreams
-
@Swordfish
Ich weiß nicht, aber der Code erinnert mich ein wenig an Python.Und unter Python liefert der Ausdruck 4 * ' ' vier Leerzeichen. Folgender Code liefert einen kleinen Tannenbaum.
4 * ' ' + 1 * '*' 3 * ' ' + 3 * '*' 2 * ' ' + 5 * '*'
Vielleicht weht daher der Wind.
@luis
Ist dir bewußt dass jedes Zeichen intern durch eine Zahl dargestellt wird?
-
@Quiche-Lorraine sagte in Problem bei Tannenbaumprogramm:
@luis
Ist dir bewußt dass jedes Zeichen intern durch eine Zahl dargestellt wird?und dass ein
char
nur ein Zeichen aufnehmen kann
(und eigentlich auch nur einint
mit kleinem Wertebereich ist)
-
Dieser Beitrag wurde gelöscht!
-
Ich verstehe nicht, was du mir dieser Antwort sagen willst bzw. warum du scheinbar glaubst, dass ich erraten kann, was dein Problem ist.
-
Dieser Beitrag wurde gelöscht!
-
@luis Du könntest erstmal freundlicherweise vorarbeit leisten und deinen Eingangsbeitrag zu diesem Thema ordentlich formatieren und Deine Variablen sinnvoll benennen. So habe ich nichtmal Lust das zu lesen.
-
Dieser Beitrag wurde gelöscht!
-
@luis du kannst das auch gleich mit deinem aktuellen Coden machen und den hier rein Stellen.
-
@luis sagte in Problem bei Tannenbaumprogramm:
Output den ich haben will
-----*
----***
---*****
--*******
-*********
-----#
bindestrich = leerzeichenAch, ich weiß doch auch nicht.
#include <cstdlib> #include <iostream> #include <string> int main() { std::cout << "Height: "; int height; if (!(std::cin >> height) || !height) { std::cerr << "Input error.\nbye.\n\n"; return EXIT_FAILURE; } for (int line{}; line + 1 < height; ++line) std::cout << std::string(height - line - 1, ' ') << std::string(line * 2 + 1, '*') << '\n'; std::cout << std::string(height - 1, ' ') << "#\n"; }
oder mit manipulators. Liest sich aber viel hässlicher:
for (int line{}; line + 1 < height; ++line) std::cout << std::setw(height - line - 1) << std::setfill(' ') << ' ' << std::setw(line * 2 + 2) << std::setfill('*') << '\n'; std::cout << std::setw(height + 1) << std::setfill(' ') << "#\n";
oder mit schleifchen:
for (int line{}; line + 1 < height; ++line) { for (int spaces{ 1 }; spaces < height - line; ++spaces) std::cout.put(' '); for (int stars{}; stars < line * 2 + 1; ++stars) std::cout.put('*'); std::cout.put('\n'); } for (int spaces{ 1 }; spaces < height; ++spaces) std::cout.put(' '); std::cout << "#\n";
aber man sollte es wahrscheinlich bleiben lassen. Es wird nur hässlicher.