/* * Simple ASCII art program. * FIXME preliminary version from 10/21 class, with a few additions. */ #include void clear(int rows, int cols, char grid[rows][cols]); void print(int rows, int cols, char grid[rows][cols]); void set(int rows, int cols, char grid[rows][cols], int r, int c, char ch); void clear_line(); int main(void) { puts("how many rows, cols?"); int rows, cols; if (scanf("%d %d", &rows, &cols) != 2) { puts("input must be integer"); return 1; } if ((rows <= 0) || (cols <= 0)) { puts("both values must be positive"); return 1; } char canvas[rows][cols]; clear(rows, cols, canvas); char cmd; int row, col; char ch; do { clear_line(); puts("enter command"); puts("\tp to print"); puts("\tc to clear"); puts("\ts row col char to set an element"); puts("\tq to quit"); cmd = getchar(); switch(cmd) { case 'p': print(rows, cols, canvas); break; case 'c': clear(rows, cols, canvas); break; case 's': if (scanf("%d %d %c", &row, &col, &ch) != 3) { puts("invalid"); } else { set(rows, cols, canvas, row, col, ch); } break; case 'q': break; default: puts("invalid command"); } } while (cmd != 'q'); } void clear(int rows, int cols, char grid[rows][cols]) { for (int r = 0; r < rows; ++r) { for (int c = 0; c < cols; ++c) { grid[r][c] = ' '; } } } /* ADDED after class -- code to print top, bottom rows of border */ void printborder(int cols) { putchar('+'); for (int c = 0; c < cols; ++c) { putchar('-'); } putchar('+'); putchar('\n'); } void print(int rows, int cols, char grid[rows][cols]) { printborder(cols); for (int r = 0; r < rows; ++r) { putchar('|'); for (int c = 0; c < cols; ++c) { putchar(grid[r][c]); } putchar('|'); putchar('\n'); } printborder(cols); } void set(int rows, int cols, char grid[rows][cols], int r, int c, char ch) { if (r < 0 || r >= rows || c < 0 || c >= cols) { puts("invalid"); } else { grid[r][c] = ch; } } /* discard input until end of line */ void clear_line() { while (getchar() != '\n') { } }