ASCII ausgabe!!



  • gelöscht



  • Hi

    benutze ncureses.h statt curses.h, ncurses wird weiterentwickelt und ist heute mehr verbreitet.

    Außerdem woher weißt du, dass die Bildschirm Dimensionen genau 35x99 betragen? Wenn du mal in einem xterm arbeitest und das xterm Fenster vergrößerst, verkleinerst, dann ändert sich das. Es gibt 2 Makros, die dir das genau sagen, COLS und LINES.

    Welche Stelle des Codes sollen die Leerzeichen ausgeben? Ich finde keine.

    edit: hab's gefunden, hab auch die Komentare nicht geachtet.
    int zeichen3 = 32; ist nicht portabel, wenn zeichen3 ein Leerzeichen sein soll. Mach einfach so:

    int zeichen3 = ' ';
    


  • gelöscht



  • Schlaftänzer schrieb:

    hmm... funktioniert auch nicht. Gibt immernoch die 32 anstatt ein Leerzeichen aus. Stimmt die Formatierung eventuell nicht?

    das ist tatsächlich mekrwürdig. Vielleicht probierst du es so:

    if (e == 4)                         /*schreibt Leerzeichen wenn e = 4 ist*/
        {
          matrix[b][i] = ' ';
          mvprintw(x,y," "); 
          refresh();
        }
    


  • gelöscht



  • Statt

    for(j = 0; j <= 35; j++)              /*schreibt Bildschirm mit Einsen und Nullen voll*/ 
      { 
      for(i = 0; i <= 99; i++)
    

    benutze

    for(j = 0; j <= LINES; j++)              /*schreibt Bildschirm mit Einsen und Nullen voll*/ 
      { 
      for(i = 0; i <= COLS; i++)
    


  • mvprintw(x,y,"%c",matrix[j][0]);
    ...
    mvprintw(x,y,"%c",matrix[j][0]);
    

    Sind deine Matrixeinträge Zahlen oder Zeichen?

    asd



  • Ich meinte natürlich

    mvprintw(x,y,"%c",matrix[j][0]);
    
    mvprintw(x,y,"%d",matrix[j][0]);
    

    asd



  • asd schrieb:

    Ich meinte natürlich

    mvprintw(x,y,"%c",matrix[j][0]);
    
    mvprintw(x,y,"%d",matrix[j][0]);
    

    asd

    siehe oben, es sind ints. Aber das ist kein Problem, dafür gibt es das %c.



  • supertux schrieb:

    siehe oben, es sind ints. Aber das ist kein Problem, dafür gibt es das %c.

    Das meinte ich nicht.
    Schlaftänzer benutzt an der stelle wo das Leerzeichen eingefügt werden soll %c.
    Direkt danach beim verschieben der Spalte benutzt er aber %d.

    Daher meine Frage ob die Matrixeinträge als Buchstaben oder Zahlen gemeint sind.
    asd



  • Die Matrix soll Nullen, Einsen und ab und zu Leerzeichen ausgeben, wie im Quelltext beschrieben.

    Schlaftänzer



  • yeah...danke asd!!

    do
      {
      y1 = rand() % 99;
      y2 = rand() % 99;
      y3 = rand() % 99;
      c = 1;
      for(n = 0; n <= 30; n++)
        {
        if (c == 1)
          y = y1;
        if (c == 2)
          y == y2;
        if (c == 3)
        {
          y = y3;
          c = 0;
        }
        x = 0;
        zeichen2 = rand() % 2;    /*schreibt 0 oder 1 in Zeile 0 und Spalten 1-99*/
        matrix[b][i] = zeichen2;
        mvprintw(x,y, "%d",matrix[b][i]);
        refresh();
        e = rand() % 15;
        if (e == 4)                         /*schreibt Leerzeichen wenn e = 4*/
        {
          matrix[b][0] = zeichen3;
          mvprintw(x,y,"%c",matrix[b][0]);
          refresh();
        }
        for(j = 35; j >= 0; j--)            /*verschiebt Spalte nach unten*/
          {
          l = j - 1;
          x = j;
          if (j == 0)
          l = 0;
          matrix[j][0] = matrix[l][0];
          if (matrix[l][0] == 32)
            mvprintw(x,y,"%c",matrix[j][0]);
          else
            mvprintw(x,y,"%d",matrix[j][0]);
          refresh();
          }
        for(k = 0; k <= 5000000; k++);
        c++;
        }
      }while(getch() == ERR);
    

    Schlaftänzer



  • @Schlaftänzer:

    mach statt

    if (matrix[l][0] == 32)
    
    if (matrix[l][0] == ' ')
    

    1. ==32 ist nicht portabel. Zwar ist es auf den meisten Architekturen ' ' == 32, muss aber nicht sein.
    2. ein == ' ' erhöht die Lesbarkeit des Codes, besonders hilfreich, wenn man debuggen muss oder Fragen im Forum stellt.


Anmelden zum Antworten