Atenção!!! Para que o programa abaixo funcione corretamente o arquivo deve estar bem formatado! E deve sobrar apenas uma linha em branco abaixo da ultima linha escrita!!!

//Download do arquivo MEGA.TXT, pra requisito para rodar o programa
Download MEGA.TXT

// Definindo as Bibliotecas Necessárias
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
typedef => serve para nomear uma tipo de dado, criar um alias, um apelido para o tipo de dado
Ex: podemos declarar typedef int inteiro, assim toda vez que formos declarar uma variável do tipo inteiro ao invés de declararmos int variável, declaramos inteiro variável
*/

/*
struct => serve para definir um conjunto de dados de variados tipos.
*/

//vamos definir um typedef para uma struct
typedef struct numeros_sorteio{
  int sorteio;
  int dezena_01;
  int dezena_02;
  int dezena_03;
  int dezena_04;
  int dezena_05;
  int dezena_06;
  int dia;
  int mes;
  int ano;
} lista;

/*
agora vamos prototipoar uma função que conta linhas
a prototipação serve pra você declarar uma função da no final do arquivo e poder chamar ela aqui no começo, deixa o negocio mais organizado :D
*/

//vamos usar essa função, pois vamos declarar nossa estrutura como um vetor. para não declara um vetor de tamanho desnecessario, vamos contar as linhas do arquivo e defini-lo com o numero exato de linhas
int numero_de_linhas(char* nome_arquivo);

// função principal que roda a porra toda
main() {
  //definindo as variaveis necessarias!
  int linhas = 0;

  //chamando a função que conta as linhas
  linhas = numero_de_linhas("MEGA.TXT");

  //agora vamos chamar o nosso conjunto de dados e criar um vetor com ela, passando como tamanha, as linhas que a função que conta linhas retornou
  lista conjunto[linhas];

  //declarar a variavel que vamos usar no for, quero declarar aqui, pau no cu se num gostou!
  int i = 0;

  //indica que arquivo vai ser um arquivo (idiota! ¬¬)
  FILE* arquivo;

  //indica o nome do arquivo, vamos passar o nome do arquivo por parametro
  arquivo = fopen("MEGA.TXT","r");

  //vamos declarar o for para que ele leia o arquivo até chegar ao numero de linhas e fim do arquivo
  for (i = 0; i < linhas; i++){
          //le os dados do arquivo, o que esta entre aspas é ã expreção que vai separar o que é inteiro do que não é para atribuirmos cada numero a uma variavel que esta dentro do nosso struct
    //cada $d represenata um inteiro do arquvio e os espaços e / serão ignorados pois estamos passando para o fscan puxar so inteiros
  fscanf  (arquivo,

            "%d %d %d %d %d %d %d %d/%d/%d",

                  &conjunto[i].sorteio,
                  &conjunto[i].dezena_01,
                  &conjunto[i].dezena_02,
                  &conjunto[i].dezena_03,
                  &conjunto[i].dezena_04,
                  &conjunto[i].dezena_05,
                  &conjunto[i].dezena_06,
                  &conjunto[i].dia,
                  &conjunto[i].mes,
                  &conjunto[i].ano
    );
  }

  //agora vamos fazer um for pra ele imprimir a porra toda
  for(i = 0; i < linhas; i++){

    //imprime cada dado do nosso conjunto, isso é babinha vai!
    printf("
      Sorteio: %d\n\t\tDezena 01: %d\n\t\tDezena 02: %d\n\t\tDezena 03: %d\n\t\tDezena 04: %d\n\t\tDezena 05: %d\n\t\tDezena 06: %d\nData: %d/%d/%d\n\n",
      conjunto[i].sorteio,
      conjunto[i].dezena_01,
      conjunto[i].dezena_02,
      conjunto[i].dezena_03,
      conjunto[i].dezena_04,
      conjunto[i].dezena_05,
      conjunto[i].dezena_06,
      conjunto[i].dia,
      conjunto[i].mes,
      conjunto[i].ano
    );
  }
  //fecho! ;D
}

int numero_de_linhas(char* nome_arquivo) {
  //indica que arquivo vai ser um arquivo (idiota! ¬¬)
  FILE * arquivo;
  //indica o nome do arquivo, vamos passar o nome do arquivo por parametro
  arquivo = fopen(nome_arquivo,"r");

  //declara as variaveis necessarias!
  int caractere = 0, existe_linhas = 0, quant_linhas = 0;

  //em quanto o arquivo não chegar ao fim continua contando!!!
  while((caractere = fgetc(arquivo)) != EOF){
          //começamos do numero 1 pois o arquivo sempre devera ter uma linha em branco no final
          existe_linhas = 1;

          // quando encontrar \n (quebra de linha) adiciona uma linha a contagem
          if(caractere == '\n'){
            quant_linhas++;
          }
  }
    
  //acabou fecha o arquivo!
  fclose(arquivo);
  return quant_linhas;
}

P.S. O Rafael ajudou na parde que seria uma expressão regular para dividir os dados do arquivo dentro das variáveis da struct