#include #include unsigned getNumber(void); char * getLine(void); int main (void) { unsigned lineCount; do { printf("Enter number of lines (please enter a positive integer): "); lineCount = getNumber(); } while (!lineCount); char ** lines = malloc(lineCount * sizeof(char *)); unsigned line; for (line = 0; line < lineCount; line ++) lines[line] = getLine(); putchar('\n'); // leaving a blank line unsigned remaining = lineCount; unsigned column; for (column = 0; remaining; column ++) { for (line = 0; line < lineCount; line ++) { if (!lines[line]) { putchar(' '); // leave a space for padding continue; } if (lines[line][column]) putchar(lines[line][column]); else { free(lines[line]); lines[line] = NULL; remaining --; putchar(' '); // leave a space for padding } } putchar('\n'); } return 0; } unsigned getNumber (void) { char * line = getLine(); char * current; unsigned value = 0; for (current = line; *current; current ++) { if ((*current < '0') || (*current > '9')) { value = 0; break; } if ((10 * value + (*current - '0')) < value) { printf("That number was too large, enter a smaller one please\n"); free(line); return 0; } value *= 10; value += *current - '0'; } free(line); if (!value) printf("Does 'positive integer' mean something different for you?\n"); return value; } char * getLine (void) { char * result = NULL; unsigned resultLength = 0; char current; while (1) { current = getchar(); if ((current == '\n') || (current == EOF)) break; result = realloc(result, ++ resultLength); result[resultLength - 1] = current; } result = realloc(result, resultLength + 1); result[resultLength] = 0; return result; }