Estou fazendo um programa que iria ler notas do teclado e iria as inserir em uma matriz tridimensional dinamicamente. estou usando o dev c++, ele complica, não mostra erros, mas para de funcionar em uma parte de codigo. se alguém puder ajudar. :rolleyes: Obs: tem um system("pause"), antes da parte que estava travando. ------------------------------------------------------------------------------ #include<stdio.h>
#include<stdlib.h>
struct coluna
{
float nota;
struct coluna *prox_coluna;
};
typedef struct coluna Col;
struct linha
{
Col *c;
struct linha *prox_linha;
};
typedef struct linha Lin;
struct tabela
{
Lin *l;
struct tabela *prox_tabela;
};
typedef struct tabela Tab;
struct fila
{
Tab* primeiro;
Tab* ultimo;
};
typedef struct fila Tfila;
//-----------------------------------------
void cria_fila(Tfila*f)
{
f->primeiro = f->ultimo = NULL;
}
int fila_vazia(Tfila*f)
{
return (f->primeiro == NULL);
}
Col* cria_no(float nota)
{
Col*no = (Col*)malloc(sizeof(Col));
if(no != NULL)
{
no->nota = nota;
no->prox_coluna = NULL;
}
return no;
}
int controle()
{
int i;
do{
printf("Acrescentar nota na ...\n1_Proxima coluna\n2_Proxima linha\n3_Proxima tabela\n\nOpcao: ");
scanf("%d",&i);
if(i<1||i>3)
{
system("cls");
printf("Opcao errada.");
}
}while(i<1||i>3);
return i;
}
int insere_fila(Tfila*f, float nota)
{
Col*novo;
int op;
novo=cria_no(nota);
if(novo == NULL)
return 0;
if(fila_vazia(f))
{system("pause");
f->primeiro->l->c = novo;
f->ultimo->l->c = novo;
system("pause");
}
else
{
op = controle();
if(op==1)
{
if(f->ultimo->l->c == NULL)
f->ultimo->l->c = novo;
f->ultimo->l->c->prox_coluna = novo;
f->ultimo->l->c = novo;
}
if(op==2)
{
f->ultimo->l->prox_linha->c = novo;
f->ultimo->l->c = novo;
}
if(op==3)
{
f->ultimo->prox_tabela->l->c = novo;
f->ultimo->l->c = novo;
}
}
return 1;
}
void exibe_notas(Tfila*f)
{
Tab* tabela;
Lin *linha;
Col *coluna;
int cont_linha, cont_tabela;
cont_linha=cont_tabela=1;
system("cls");
for(tabela=f->primeiro; tabela!=NULL; tabela=tabela->prox_tabela)
{
printf("%d Tabela)\n\n",cont_tabela);
for(linha=f->primeiro->l; linha!=NULL; linha=linha->prox_linha)
{
printf("%d Linha)",cont_linha);
for(coluna=f->primeiro->l->c; coluna!=NULL; coluna=coluna->prox_coluna)
{
printf(" %.2f ", coluna->nota);
}
printf("\n");
cont_linha++;
}
printf("\n\n");
cont_tabela++;
}
}
int main()
{
Tfila f;
int op, ok1;
float nota;
cria_fila(&f);
printf("Inserir uma nota na matriz.\n\n1_Sim\n2_Nao\n\nOpcao: ");
scanf("%d", &op);
while(op==1)
{
printf("Digite uma nota: ");
scanf("%f",¬a);
ok1=insere_fila(&f, nota);
exibe_notas(&f);
printf("Deseja inserir mais uma nota na matriz.\n\n1_Sim\n2_Nao\n\nOpcao: ");
scanf("%d", &op);
}
} ----------------------------------------------------------------------------------------------------------