Zeichenausgabe



  • Hallo an alle erstmal. Also mein problem liegt darin das ich am anfang bin ein memory zu programmieren. also echt am anfang. naja das soll es auch nich sein wo ich hilfe brauche sondern In der function kartengeben. Wenn ich das programm ausführe macht er nich eifach nur die schöne auflistung wie er eigentlich sollte nämlich nur die zahl und das zeichen dazu sondern er macht es je nach dem 3 oder 4 mal wenn man pech hat. dazu kommt noch das er manchmal eifach zwei zahlen direkt zusammen schreibt ohne das zeichen das dazwischen sein sollte auszugeben.

    hier mal der code:

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    char verdeckt[16];
    char karte[16];
    
    void ausgabe()
    {
         verdeckt[0]=char(176);
         for(int i=0; i<=16; i++)
         {
          verdeckt[i]=verdeckt[0];
         }
         int i=0;
         cout <<"\n";
         for(int a=0; a<=3; a++)
         {
          cout <<"   "<<verdeckt[i]<<"   "<<verdeckt[i+1]<<"   "
          <<verdeckt[i+2]<<"   "<<verdeckt[i+3]<<"   "<<endl;
          cout <<"\n";
          i=i+4;
          }
    }
    
    void kartengeben()
    {
         srand( (unsigned) time(NULL) ) ;
         for(int i=0; i<=16; i++)
         {
          int a = rand()%8;
    
          if(a==0)
          {
           i=i-i;
          }
          else
          {
           karte[i]=char(a);
           cout <<i<<karte[i];
          }
         }
    }
    
      int main()
    {
     kartengeben();
     cout <<"\n";
     ausgabe();
     cin.get();
    }
    

    Hoffe ihr könnt mir helfen

    Mfg 1009927



  • if(a==0)
          {
           i=i-i;
          }
    

    i = i-i ist das gleiche, wie i = 0 und das wilst du nicht wirklich machen, oder?
    So stellst du je nachdem die Schleife wieder auf den Anfang zurück und wenn du Pech hast, kann das eine endlos Schleife werden, weil a ja eine Zufallszahl ist.



  • das soll er ja nur dan machen wenn:

    a==0
    

    weil das kein grafisch darstellbares zeichen ist.
    und er stellt es ja nicht auf null sondern nur um eins zurück damit es nochmals durchlaufen wird und einen neuen wert zugewiesen bekommt



  • Ich war mal so frei deinen Code mit Komentaren vollzuschreiben 🙂

    void kartengeben()
    {
         srand( (unsigned) time(NULL) ) ;
         for(int i=0; i<=16; i++)
         {
          int a = rand()%8;        //schöner als das
    
          if(a==0)                 //zusammen mit dem
          {                        //und dem
           i=i-i;                  //und vor allem richtiger
          }                        //ist int a = 1 + rand()%8;
          else
          {
           karte[i]=char(a);       //Hier wird eine zahl zwischen 1 und 8
           cout <<i<<karte[i];     //in ein char gecastet, d.h. hier konkret
          }                        //als ASCII Code interpretiert, zwischen 1 und 8
         }                         //liegen im ASCII Code aber nur Steuerzeichen.
    }
    

    Du solltest dir also einen Bereich aus dem ASCII Code aussuchen,
    in dem die Zeichen auch alle von Menschen lesbar sind und dann weiterprobieren.



  • 1009927 schrieb:

    und er stellt es ja nicht auf null sondern nur um eins zurück damit es nochmals durchlaufen wird und einen neuen wert zugewiesen bekommt

    Nein.

    Oder was gibt das für dich:
    i = 5 - 5;

    Wenn du da etwas machen willst, dann mach:

    i--; // Das gleiche, wie i = i - 1;
    


  • [...]



  • ah danke. jetzt gehts. dachte erst das es nur normale zeichen sind und keine steuerzeichen. thx



  • Ich habe deinen Code mal ein bisschen bearbeitet.

    #include <iostream> 
    #include <cmath> 
    #include <ctime>
    using namespace std; 
    
    namespace {
    	char verdeckt[16]; 
    	char karte[16];
    }
    
    void ausgabe();
    void kartengeben();
    
    int main() { 
    	kartengeben(); 
    	cout<<"\n";
    	ausgabe(); 
    	cin.get(); 
    }
    
    void ausgabe() { 
         verdeckt[0] = char(176); 
         for(int i = 1; i < 16; ++i)  
    		verdeckt[i] = verdeckt[0];
         cout<<"\n"; 
         for(int a = 0; a <= 3; ++a) {
    		 cout<<"   ";
    		 for (int i = 0; i < 4; ++i) {
    			 cout<<verdeckt[i]<<"   ";
    			 if (i == 3)
    				 cout<<"\n";
    		 }
    		 cout<<"\n";
         } 
    } 
    
    void kartengeben() { 
         srand((unsigned)time(NULL)) ; 
         for(int i = 0; i < 16; ++i) { 
    		int a = rand()%8;
    		if (a)
    			karte[i] = char(a);  
         } 
    }
    

    Vom Programmiertechnischen sollte es jetzt mehr oder weniger passen. Ob's Sinn
    macht ist eine andere Sache. 😉



  • drakon schrieb:

    i--; // Das gleiche, wie i = i - 1;
    

    oh sry. wollte ich eigentlich auch. is mir garnich aufgefallen


Log in to reply