#include <stdio.h>
#include <stdlib.h>
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;
}
Comments