aaaaaa123456789 icon

JV Programming Challenges, week 1, problem 1

aaaaaa123456789 | PRO | 11/13/13 10:03:13 PM UTC | 0 ⭐ | 419 👁️ | Never ⏰ | []
C |

1.91 KB

|

None

|

0 👍

/

0 👎

#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