Eita lê lê...
A função le_paises existe para preencher com dados (nomes) a tabela (matriz) de países, tão somente, notei a intenção.
#include<stdio.h>
#include<stdlib.h>
//#ifndef _COVID19_H #define _COVID19_H
// ☒ Está comentado e senâo errada.
#define TAM_MAX_NOME 50
// ☒ Lugar errado, seu lugar é em _COVID19_H
void le_paises(int num_paises, int matriz, char read_p[][TAM_MAX_NOME + 1]);
// ☒ Lugar errado, seu lugar é em _COVID19_H
int main(void)
{
int num_paises;
int i, j;
char matriz[49][49];
// ☐ Preconceito total com quem declara todas variáveis no topo,
// normalmente tem aqui coisas que só vem nas profundezas do código,
// Sugestão é declarar as variáveis bem próximo de seu bloco de uso.
// int num_paises = 0;
printf("Digite o numero de paises:\n");
scanf("%d", &num_paises);
// int i, j;
printf("Digite os pais:\n");
for(i=0; i<num_paises; i++){
for(j>i; j<num_paises; j++){
scanf("%s ", &matriz[j]);
// ☒ Esse sinal (&) é indiferente nesse caso, por quê? Porque
// a referência da referência é ela mesma, para evitar a redundância,
// ☐ sugestão é referenciar a desreferência, fica assim &matriz[j][0]
}
}
// ☒ O return da função main? sumiu ...
}
//abaixo não consego chamar não sei o porque a função:
// PORQUE ESTA NO BLOCO DE COMENTÁRIO
/*le_paises(num_paises, matriz, read_p);
return 0;
}
void le_paises(int num_paises, int matriz, char read_p[][TAM_MAX_NOME + 1])
{
char read_p[TAM_MAX_NOME][TAM_MAX_NOME];
int m, n;
printf("Os paises:\n\n");
printf("%d", num_paises);
for(m=0; m<num_paises; m++){
for(m>n; n<matriz; n++){
printf("%s", read_p[m][n]);
}
}
}
*/