Как улучшить код на Си(сделать "красивше")?
char num1[N];
  char num2[N];
  char num3[N];
  char *nums[3] = {num1,num2,num3};
А чего не nums[3][N]?while(c=fgetc(in))
Когда ты думаешь условие while перестанет выполняться?if ( c == '\n' || c == ' ' )
Я бы добавил проверку на конец файла: if ( c == '\n' || c == ' ' || c == EOF)(*(nums+i))[j]
А чего не nums[i][j]?int length(char s[]){
Есть такая готовая функция strnlen из string.h
maxNum не обрабатывает случай когда аргументы равны.
Нужно найти свой стиль оформления кода, и стараться его придерживаться
рекомендую на будущее С. Макконнелл "Совершенный Код"
---------------------------------------------------------------------------------------------
отступы после математических знаков ( +, -, *, /, =), после запятой, после проверок ( ==, !=, <=, <, >, >=), логические отступы - после каждой задачки, переменные нужно объявлять как можно ближе к месту использования#include <stdio.h>
#include <stdlib.h>     /* atoi */

int main()
{
  char nums[3][N];

  // читаем
  FILE *in = fopen("input.txt", "r");
  for (int i = 0; i < 3; ++i)
  {
    int j = 0;

    char c;
    while(c = fgetc(in))
    {
      nums[i][j++] = c;

      if (c == '\n' || c == ' ')
      {
        nums[i][j] = '\0';
        break;
      }
    }
  }
  fclose(in);
  
  // находим
  int maxNums = 0;
  for (int i = 0; i != sizeof(nums); ++i)
  {
    const int curNum = atoi(nums[i]);
	if (curNum <= maxNums)
		continue;
		
	maxNums = curNum;
  }

  // выводим
  FILE *out = fopen("output.txt", "w");
  fprintf(out, "%s", maxNums);
  fclose(out);

  // printf("%s", maxNum(*nums, maxNum(*(nums+1),*(nums+2))));

  return 0;
}