Boas, estou a fazer um programa que permita inserir tabelas de verdade para mais tarde fazer combinações das mesmas, no maximo temos circuitos com 3 entradas e 1 saida, neste momento o meu programa já permite inserir uma tabela e tbm visualizar a mesma, eu gostaria que me ajudassem pois não sei como guardar o historico das tabelas anteriores, ou seja, cada vez que insiro uma tabela o meu programa apaga a anterior;agradecia neste momento o meu programa está assim: Código: #include<stdio.h> typedef struct circuito { char designacao[10]; int tabela[4][8],entradas; }CIRCUITO; void alterar(){} void listar(){} void combinar(){} void menu() { printf("\n\nescolha uma opcao:\n"); printf("1-inserir circuitos\n"); printf("2-alterar circuito\n"); printf("3-consultar tabela de verdade de um circuito\n"); printf("4-Listar circuitos logicos inseridos\n"); printf("5-combinar circuitos logicos\n"); printf("0-sair\n"); } void inserir(CIRCUITO *aptx) { int t,i,j,a,portas[4][8]; char nome[10]; printf("insira o nome do circuito:\n"); fflush(stdin); gets((*aptx).designacao); do { printf("qual o circuito que deseja inserir:\n"); printf("1-circuito com 1 entrada:\n"); printf("2-circuito com 2 entradas:\n"); printf("3-circuito com 3 entradas:\n"); printf("4-voltar ao menu inicial:\n"); scanf("%d",&(*aptx).entradas); a=(*aptx).entradas; } while(a!=1 && a!=2 && a!=3); if(a==1) { a=2; t=2; } else { if(a==2) { a=4; t=3; } else { a=8; t=4; }} printf("insira a tabela:\n"); for(i=0;i<a;i++) { switch(i) { case 0:printf("primeira linha\n");break; case 1:printf("segunda linha\n");break; case 2:printf("terceira linha\n");break; case 3:printf("quarta linha\n");break; case 4:printf("quinta linha\n");break; case 5:printf("sexta linha\n");break; case 6:printf("septima linha\n");break; case 7:printf("oitava linha\n");break; } for(j=0;j<t;j++) { switch(j) { case 0:printf("coluna 1-->");break; case 1:printf("coluna 2-->");break; case 2:printf("coluna 3-->");break; case 3:printf("coluna 4-->");break; } do{ scanf(" %d", &(*aptx).tabela[j][i]); if(((*aptx).tabela[j][i])!=0 && ((*aptx).tabela[j][i])!=1) { printf("valor nao valido\ninsira 1 ou 0:"); }} while (((*aptx).tabela[j][i])!=0 &&((*aptx).tabela[j][i])!=1); } } } void consultar(struct circuito x) { char nome[10]; int i,j,l,c,b,linha; fflush(stdin); printf("insira o nome do circuito que deseja inserir:\n"); gets(nome); b=(x.entradas); if(b==1) { l=2; c=2; } if(b==2) { l=4; c=3; } if(b==3) { l=8; c=4; } if((strcmp(nome,x.designacao))==0) { for(i=0;i<l;i++) { switch(i) { case 0:printf("primeira linha\n");break; case 1:printf("segunda linha\n");break; case 2:printf("terceira linha\n");break; case 3:printf("quarta linha\n");break; case 4:printf("quinta linha\n");break; case 5:printf("sexta linha\n");break; case 6:printf("septima linha\n");break; case 7:printf("oitava linha\n");break; } for(j=0;j<c;j++) { switch(j) { case 0:printf("coluna 1-->%d\n",(x.tabela[j][i]));break; case 1:printf("coluna 2-->%d\n",(x.tabela[j][i]));break; case 2:printf("coluna 3-->%d\n",(x.tabela[j][i]));break; case 3:printf("coluna 4-->%d\n",(x.tabela[j][i]));break; } } } } else printf("tabela nao encontrada"); } main() { char opcao; struct circuito p; do { menu(); scanf(" %c", &opcao); switch(opcao) { case '1': inserir(&p);break; case '2': alterar();break; case '3': consultar(p);break; case '4': listar();break; case '5': combinar();break; case '0':break; default: printf("opcao nao valido\n\n"); } } while(opcao!='0'); getch(); }
Isso acontece pois utilizas sempre a mesma variavel Código: main() { char opcao; [B]struct circuito p;[/B] do { menu(); scanf(" %c", &opcao); switch(opcao) { [B]case '1': inserir(&p);break;[/B] case '2': alterar();break; case '3': consultar(p);break; case '4': listar();break; case '5': combinar();break; case '0':break; default: printf("opcao nao valido\n\n"); } } while(opcao!='0'); getch(); } Tens de guardar as coisas num array "struct circuito p[max_n_circuitos];"