2015-02-23 3 views
0

Я пытаюсь заполнить массив символов без знака квадратом ASCII, а затем распечатать его на экране. В настоящее время это мой код:заполняющий фреймбуфер с квадратом

#include <stdio.h> 
#define W 80 
#define H 23 

static int clear(unsigned char *p, int lim) 
{ 
     int i; 

     for (i = 0; i < lim; i++) 
       p[i] = ' '; 
     return i; 
} 

static int square(unsigned char *p, int x, int y, int wh) 
{ 
     int i, j; 

     for (i = y; i < wh; i++) { 
       for (j = x; j < wh; j++) 
         p[j] = '@'; 
       p[i] = '\n'; 
     } 

     return i - j; 
} 

int main(void) 
{ 
     unsigned char buf[W * H]; 
     clear(buf, sizeof buf); 
     square(buf, 1, 2, 3); 
     fwrite(buf, 1, sizeof buf, stdout); 

     return 0; 
} 

Этот код при компиляции приведет ни в печати, не печатаются правильно и т.д ..

Вот результат из кода Я хочу:

@@@ 
    @@@ 
    @@@ 

Любая помощь приветствуется, так как я не понимаю, как заполняется фреймбуфер, а затем печатает его на экране. Спасибо.

ответ

0

попробовать это

static void point(unsigned char *p, int x, int y, unsigned char ch){ 
    if(x < W && y < H) 
     p[W*y + x] = ch; 
} 

static void square(unsigned char *p, int x, int y, int wh){ 
    int i, j; 

    for (i = y; i < y + wh; i++) { 
     for (j = x; j < x + wh; j++) 
      point(p, j, i, '@'); 
    } 
} 
+0

Спасибо, это похоже на работу;) – peinmat

+0

новой строки требуется, когда размер консоли и буфер отличается. Используйте другую функцию, а не используйте fwrite в таком случае. – BLUEPIXY

Смежные вопросы