I am having an error since I needed to turn a 2d array into a 3d array. I understand this because if I put the array assignment in comment, I no longer have the problem. I also send here the part of the code where I assign the 3d array.
consulta agendaMedicos[50][50][50];
consulta agendaEnfermeiros[50][50][50];
I don't think it's relevant but the struct I use is this:
typedef struct Consulta {
char nomeUtente[70];
int numSNS;
int dia;
int mes;
int ano;
int horasInicio;
int minutosInicio;
int horasFim;
int minutosFim;
} consulta;
Here is an example of how I send the array to a new function
void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
Here my only function :
void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
{
do
{
puts("Insira o dia:");
scanf("%d", &agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
system("cls");
}while (agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia < 0 || agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia > 31);
printf("%d", agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
}
Here my main code :
int main(int argc, char *argv[]) {
int membroEscolhido = 1, clinicaSelecionada = 0;
int nAgendasMedico[50];
consulta agendaMedicos[50][50][50];
consulta agendaEnfermeiros[50][50][50];
nAgendasMedico[membroEscolhido] = 0;
novaConsulta(nAgendasMedico, agendaMedicos, membroEscolhido, clinicaSelecionada);
nAgendasMedico[membroEscolhido]++;
return 0;
}
When I compile the program, no error appears, what happens is that the program closes after a while, as in the image:
There is my minimal reproducible example:
#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct Consulta {
char nomeUtente[70];
int numSNS;
int dia;
int mes;
int ano;
int horasInicio;
int minutosInicio;
int horasFim;
int minutosFim;
} consulta;
void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada);
int main(int argc, char *argv[]) {
int membroEscolhido = 1, clinicaSelecionada = 0;
int nAgendasMedico[50];
consulta agendaMedicos[50][50][50];
consulta agendaEnfermeiros[50][50][50];
nAgendasMedico[membroEscolhido] = 0;
novaConsulta(nAgendasMedico, agendaMedicos, membroEscolhido, clinicaSelecionada);
nAgendasMedico[membroEscolhido]++;
return 0;
}
void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
{
do
{
puts("Insira o dia:");
scanf("%d", &agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
system("cls");
}while (agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia < 0 || agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia > 31);
printf("%d", agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
}
My development program is DevC++ an C language. Thank you all
moving the 3d arrays from the stack (approx 11.2 million bytes each) to the file global space results in the following code:
#include <stdio.h>
#include <stdlib.h>
// much more flexible to separate definition of the struct
// from a 'typedef' for that struct
struct Consulta
{
char nomeUtente[70];
int numSNS;
int dia;
int mes;
int ano;
int horasInicio;
int minutosInicio;
int horasFim;
int minutosFim;
};
typedef struct Consulta consulta;
consulta agendaMedicos[50][50][50]; // <- in file global space
void novaConsulta(int *nAgendasMedico, consulta agendaMedicos[][50][50], int membroEscolhido, int clinicaSelecionada)
{
do
{
puts("Insira o dia:");
scanf("%d", &agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
//system("cls");
}while (agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia < 0 || agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia > 31);
printf("%d", agendaMedicos[nAgendasMedico[membroEscolhido]][membroEscolhido][clinicaSelecionada].dia);
}
// notice the correction to the `main()` signature
// so compiler does not output 2 warning messages
// about unused parameters
int main( void )
{
int membroEscolhido = 1;
int clinicaSelecionada = 0;
int nAgendasMedico[50];
//consulta agendaEnfermeiros[50][50][50]; // moved to file global space
nAgendasMedico[membroEscolhido] = 0;
novaConsulta(nAgendasMedico, agendaMedicos, membroEscolhido, clinicaSelecionada);
nAgendasMedico[membroEscolhido]++;
return 0;
}