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 der unsigned oder signed ist.
    Bei signed geht der Wertebereich oft nur von -128 bis 127.

    Ein switchmit nur einem case ist nur ein verkapptes ´ifBei einemdefaultdabei kommt noch derelse`-Zweig dazu

    case 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 wenn o den Wert 1 hat, und die 2. Schleife wird nicht ausgeführt ausser wenn s 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 immer true, da true || (irgendwas) halt true ist. Und 10 als bool interpretiert ist halt true. Der Effekt ist genau der selbe wie wenn du case 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 😌


Anmelden zum Antworten