probleme mit "Program"(Anfänger)
-
Serwus Leute,
brauche mal eure Hilfe. Ich hab mir als Übung und da ich noch gern eien par Spiele mit Karten coden möchte (versucht) eine Kartengeneraotor für Aciibilder zu bastelt den ich dann immer includieren kann(kenn den Fachausdruck nicht).
mein Problem ist nun aber dass der Code nicht richtig ausgeführt wird. Er wird zwar complet compiliert aber in der Console wird nichts angezeigt. und Fehlermeldungen kommen auch keine. Hab schon locker 20 mal den code gelsen und kein Fehler gefunden.#include <iostream> using namespace std; char a = 201;//╔ char b = 205;//═ char d = 187;//╗ char e = 186;//║ char f = 200;//╚ char g = 188;//╝ char H = 3; //♥ char D = 4; //♦ char C = 5; //♣ char S = 6; //♠ char i = 0; char I = 0; char o = 0; char O = 0; void Karte (int s, int n, char c) { if(s % 2 == 0) { s++; } o=(s/0.99); //berechnen von seitenverhältnis 1:1.1 Ecken werden abgezogen if (o % 2 == 0) { o++; } for(I=1; I == o; I++) //printen von Karte { if(I==1) { cout<<a; for(i=1; i==s; i++) { cout<<b; } cout<<d; } else if(I == 2 || I==o-1) { for(I=1; I<=o; I++) //Printen von linie mit Farbe und Zahl { switch(I) //überprüfung ob erste oder letzte Linie { case 1: cout<<e; break; default: cout<<e<<c; for(i=1; i<s-2; i++ ) { cout<<" "; } break; } switch(n) //überprüfung ob einstellige oder zweistellige Zahl oder Zeichen { case 10 || n>14: cout<<n; break; case 11: cout<<"B"<<" "; break; case 12: cout<<"Q"<<" "; break; case 13: cout<<"K"<<" "; break; case 14: cout<<"A"<<" "; break; default: cout<<n<<" "; break; } switch(I) //überprüfen ob erste odr letzte Linie { case 1: for(i=1; i<s-2; i++) { cout<<" "; } cout<<c<<e; break; default: cout<<e; break; } } } else { cout<<f; for(i=1; i == s; i++) { cout<<b; } cout<<g; } } } int main() { Karte(9, 10, H); return 0; }
Schon mal vorweg ein riesieges Danke. Und sorry für den unschönen Code
Ach und ich nutze Code::Blocks als IDE. Aber mit Devc++ hats auch nicht gefunst
-
@käsekuchen sagte in probleme mit "Program"(Anfänger):
aber in der Console wird nichts angezeigt.
Die ist oft Zeilengepuffert. D.h. die Ausgabe erfolgt erst, wenn ein '\n' und/oder ein flush kommt.
und Fehlermeldungen kommen auch keine.
Dann schalte mal den Warnlevel auf Maximum -Wall und -Wextra sollten es mindestens sein.
Bei verschachtelten Schleifen (eine Schleife innerhalb einer Anderen) sollte man schon unterschiedliche Laufvariablen nehmen.
Variablennamen können aus aussagekräftigen Namen bestehen.
In drei Tagen kannst du den Code selber nicht mehr lesen.Beim Typ
char
ist nicht definiert, ob derunsigned
odersigned
ist.
Beisigned
geht der Wertebereich oft nur von -128 bis 127.Ein
switch
mit nur einemcase
ist nur ein verkapptes ´ifBei einem
defaultdabei kommt noch der
else`-Zweig dazucase 10 || n>14:
funktioniert so nicht.
for(i=1; i == s; i++)
Wird gar nicht oder nur einmal (wenn s = 1) durchlaufen.
-
@käsekuchen sagte in probleme mit "Program"(Anfänger):
Serwus
Servus
eien par ... Kartengeneraotor für Aciibilder zu bastelt
ein paar ... Kartengenerator für ASCII-Bilder zu basteln
complet compiliert ... Console ... gelsen und kein Fehler gefunden.
komplett kompiliert ... Konsole ... gelesen und keinen Fehler gefunden.
o=(s/0.99); //berechnen von seitenverhältnis 1:1.1 Ecken werden abgezogen
Wenn du Seitenverhältnis 1:1.1 willst, dann solltest du mit 1.1 multiplizieren bzw. durch 1.1 dividieren. Mit 0.99 bekommst du Seitenverhältnis 1:0.99 bzw. 1:1.010101...
for(I=1; I == o; I++) //printen von Karte ... for(i=1; i==s; i++)
Eine for-Schleife wird ausgeführt so lange der 2. Ausdruck (als
bool
interpretiert)true
ist. D.h. die erste Schleife wird gar nicht ausgeführt ausser wenno
den Wert 1 hat, und die 2. Schleife wird nicht ausgeführt ausser wenns
den Wert 1 hat. Ohne mir den weiteren Code angesehen zu haben würde ich vermuten dass bei beiden Schleifen<
oder<=
statt==
angebracht wäre.for(I=1; I<=o; I++) //Printen von linie mit Farbe und Zahl ... for(i=1; i<s-2; i++ )
Die Bedingung hier sieht schon eher sinnvoll aus. Bloss: du verwendest hier die Variable
I
die schon in der äusseren Schleife verwendet wird. Das macht eher selten Sinn. Und selbst in den seltenen Fällen wo es Sinn macht, ist es mMn. verwirrend.switch(n) //überprüfung ob einstellige oder zweistellige Zahl oder Zeichen { case 10 || n>14: cout<<n; break; ...
Er. Also ich bin grad ziemlich überrascht dass das überhaupt kompiliert. Nur es tut nicht das was du willst. Der Ausdruck
10 || n>14
ist immertrue
, datrue || (irgendwas)
halttrue
ist. Und10
alsbool
interpretiert ist halttrue
. Der Effekt ist genau der selbe wie wenn ducase true:
bzw.case 1:
hinschreiben würdest. Und ich gehe jetzt einfach mal davon aus dass das nicht das ist was du erreichen wolltest.
-
Danke für die Antworten hatte wohl ein Bret vor dem Kopf. Hab mir nach euren Denkanstößen den Code nochmals angesehen und die Fehler plus ein par weitere Logigfehler gefunden.
Danke
-
Brett
paar
Logik
-
@hustbaer
Danke