ASCii Zeichen in ein 10x10 Feld schreiben



  • Halli hallo,

    ich versuche ein Feld der Größe 10x10 mit zufälligen ASCii Zeichen zufüllen und dann wieder auszugeben.

    Das ganze soll per Zufall passieren, das Feld also jedesmal anders aussehen.

    Im großen und ganzen klappt das schon ganz gut, ich habe einige Zeichen die nicht sauber angezeigt werden raus genommen, allerdings erzeugt das ganze auch einzelne Punkte die immer den mit dem int Wert 2293452 gefüllt sind. Dies habe ich ich mehrfach ausgelesen.

    Eigentlich kann das aber nicht sein, da das Feld vom Typ unsigned char ist und eigentlich die Zufallszahl auch nicht so hoch ist...

    Ich weiss gerade nicht mehr so ganz weiter und finde den Fehler auch nicht!

    Ein wenig hilfe wäre SEHR sympathisch.

    Hier der Auszug aus dem Programm der wichtig ist. Das Programm im ganzen ist nur minimal größer.

    Liebe Grüße, der Blaui!

    int zufallszahl (void)
    
         {
                     int i=1;
    
                     do
                     {
                         i=rand();
                         printf("%i\n\t"),i;
    
                     }
                     while(i<256&&i!=7&&i!=8&&i!=9&&i!=10&&i!=13&&i!=32&&i!=95&&i!=96&&i!=238&&i!=2293452&&i!=0);
    
                     return i;
    
         }
    
    int main (int)
    
        {
             unsigned char feld[10][10];
             unsigned char magic;
             unsigned char test[10];
    
             int a=0;
             int b=0;
             int c=0;
             int x=0;
             int y=0;
             int zahl[10][10];
    
             srand(time(NULL));
    
             for (a=0;a<10;a++)
                 {
                  for (b=0;b<10;b++)
                      {
                       c=c+1;
                       zahl[b][a]=c;
                      }
                 }    
    
             for (x=0;x<10;x++)
                 {
                  for (y=0;y<10;y++)
                      {                 
                          feld[y][x]= zufallszahl();     
                      }
    
                 } 
    
             for (x=0;x<10;x++)
                 {
                  printf("\t\n\n|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|%3.0i: %1.0c|",zahl[0][x],feld[x][0],zahl[1][x],feld[x][1],zahl[2][x],feld[x][2],zahl[3][x],feld[x][3],zahl[4][x],feld[x][4],zahl[5][x],feld[x][5],zahl[6][x],feld[x][6],zahl[7][x],feld[x][7],zahl[8][x],feld[x][8],zahl[9][x],feld[x][9]);
                 }
    


  • Deine Funktion zufallszahl sieht irgendwie komisch aus 😃 Probier's mal so:

    int zufallszahl()
    {
      int i = 1;
    
      do
      {
        i = rand();
        printf( "%d\n", i );
      } while( ( i >= 256 ) || ( i ==7 ) /* || ... */ );
    
      return i;
    }
    

    Dein printf() war irgendwie etwas eigenartig. Ausserdem war die while-Abfrage nicht ganz korrekt. Vielleicht funktioniert's so besser.

    Gruss. mbu.



  • Wie wär's mit isprint() oder isgraph() um festzustellen, ob dein Wert sich zu einer Darstellung am Terminal eignet!?



  • Vielen Dank für die Antwort...ich werde es mal an testen.

    die printf in der Funktion war nur als ein Test, um zusehen was die Funktion macht! 😉



  • do 
      { 
        i = rand(); 
        printf( "%d\n", i ); 
      } while( ( i >= 256 ) ...
    

    Was ist dass denn fürn Schrott! 😮

    do 
      { 
        i = rand() % 256; 
        //printf( "%d\n", i ); 
      } while( i==7 || i== ...
    

Anmelden zum Antworten