peterpah 1 Denunciar mensagem Publicado 13 de Janeiro de 2013 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Data { int Dia[500]; int Mes[500]; }DATA ; typedef struct Hora { int hora[500]; int min[500]; }HORA ; typedef struct carro { char matricula[500]; int classe [100] ; int portico[100]; DATA data; HORA hora; }veiculo; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void inserir (float porticos[20] [5]) { int i,j=0,cont=0; for (i=0;i<4;i++){ cont++; printf("Protico %i \n",cont); for (j=0;j<5;j++) { printf("Insiria o preco do classe %i ",j+1); scanf("%f",&porticos[i][j]); } } } void listar (float porticos[20] [5]) { int i,j,cont=0; for (i=0;i<4;i++) { cont++; printf("Protico %i \n",cont); for (j=0;j<5;j++) { printf("O preco da %i classe e %f\n",j+1,porticos[i][j]); } } system ("Pause"); } void procurar (float portico [20][5]) { int op,op2,i,j; printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> "); scanf ("%i",&op); printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> "); scanf ("%i",&op2); system ("ClS"); i=op-1; j=op2-1; printf("O preco da classe %i do portico %i e %f\n",op2,op,portico[i][j]); system ("Pause"); } void alterar (float porticos [20][5]) { int op,op2,i,j; printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> "); scanf ("%i",&op); system ("ClS"); i=op-1; for (j=0;j<5;j++) { printf("Alterar o preco do classe %i ",j+1); scanf("%f",&porticos[i][j]); } } void inserircarro(veiculo p,int soma){ int cont; printf("%i",soma); cont=soma; printf("Insira a matricula do carro %i\n ",cont+1); scanf ("%s",&p.matricula[cont]); printf("Insira o dia \n "); scanf ("%i",&p.data.Dia[cont]); printf("Insira o mes ex('Janeiro corresponde ao 1')\n "); scanf ("%i",&p.data.Mes[cont]); printf("Insira a Hora \n"); scanf ("%i",&p.hora.hora[cont]); printf("Insira os Minutos \n"); scanf ("%i",&p.hora.min[cont]); printf("Insira o Portico\n"); scanf("%i",&p.portico[cont]); printf("Insira a Classe \n "); scanf ("%i",&p.classe[cont]); } void gasto (float porticos [20][5],veiculo p,int soma) { int at=0,i,k,pt,port,l; float gasto; char carro[100]; printf("Insira o carro que quer ver os gasto \n"); scanf ("%s",&carro); for (i=0;i<=soma;i++) { if (strcmp(carro,p.matricula)==0 ) { at=1; printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->"); scanf("%i",&port); system ("ClS"); for (i=0;i<=soma;i++){ if (strcmp (carro,p.matricula)==0) { l=p.classe[i]; k= l-1; pt=port-1; gasto=gasto+porticos[pt][k]; } } printf("O gasto do carro é %i ",gasto); } else { printf("O carro nao existe"); } } } void ganhoclasse(float porticos [20][5], veiculo p,int soma) { int pot,i,l,k,pt; float ganho=0; printf("%i",soma); printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->"); scanf("%i",&pot); for (i=0;i<soma;i++){ if (pot==p.portico[i]) { l=p.classe[i]; k= l-1; pt=pot-1; ganho=ganho+porticos[pt][k]; } } printf("O Dinheiro do portico %i e %f ",pot,ganho); system ("PAUSE"); } void listarcarros (veiculo p,int soma) { int j; for (j=0;j<soma;j++) { printf("%s",p.matricula[j]); printf("%i",p.matricula[j]); printf("o dia \n %i ",p.data.Dia[j]); printf(" o mes \n %i",p.data.Mes[j]); printf(" a Hora \n %i",p.hora.hora[j]); printf(" os Minutos %i \n",p.hora.min[j]); printf(" o Portico %i\n",p.portico[j]); printf(" a Classe %i \n ",p.classe[j]); } system ("Pause"); } int main(int argc, char *argv[]) { veiculo p; int op,soma; float porticos [20][5]; do { system ("ClS"); printf(" Escolha a opccao!\n"); printf("1. Inserir os porticos no sistema.\n"); printf("2. Listar a informacao de todos os porticos;\n"); printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n"); printf("4. Alterar os precos de um determinado portico; \n"); printf("5. Inserir uma passagem de um veiculo num portico;\n"); printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n "); printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n"); printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n"); printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n"); printf("10. Saber o número de veiculos que passa em media nos porticos;\n"); printf("0. Sair;\n"); printf("Op ->"); scanf("%i",&op); switch (op){ case 1 : system ("ClS"); inserir(porticos); break; case 2: system ("ClS"); listar(porticos); break; case 3: system ("ClS"); procurar(porticos); break; case 4: system ("ClS"); alterar(porticos); break; case 5: system ("ClS"); inserircarro(p,soma); soma=soma+1; break; case 6: system ("ClS"); gasto (porticos,p,soma); break; case 7: ganhoclasse(porticos,p,soma); break; case 8: listarcarros(p,soma); break; case 9: break; } } while (op!=0); return 0; } Eu meto a listar a estrutura de dados e nao aparece nada onde ta o problema? Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
eatg75 21 Denunciar mensagem Publicado 14 de Janeiro de 2013 Se queres que alguem te ajude idente o teu codigo se faz fazor! Victarion seized the dusky woman by the wrist and pulled her to him. Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see. Moqorro's dark eyes seemed to shine. Moqorro - I see dragons. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
NuGuN 2 Denunciar mensagem Publicado 14 de Janeiro de 2013 Boas! peterpah, devias realmente identar o teu código para que se perceba um bocado melhor. Agora ao que interessa, vi apenas a parte dos pórticos e parece-me que o teu problema está na forma como passas o argumento para a função inserir(). Da forma como a estás a passar, vais estar a alterar uma variável que apenas existe no escopo daquela função, e assim sendo, quando essa função termina, essa variável é apagada. O melhor será utilizares ponteiros. Cumps! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
eatg75 21 Denunciar mensagem Publicado 14 de Janeiro de 2013 @NuGun nao existe nada de errada com a inserir() (a nao ser a especificao explicita do tamanho do array no primeiro nivel, nao e obrigatorio aqui apenas e obrigatorio para o segundo nivel, tambem a especificao dos duas dimensoes de um array multidimensional e apenas obrigatorio para variaveis quando estao a declaradas sem inicializacao). Quando a "forma" como ele esta passar os parametros nao existe problema nenhum pois o argumento e um ponteiro valido, um array e um pointeiro!... i.e. um ponteiro para o primeiro elemento do array (Pointers 101). @peterpah vi algumas coisas que nao tas a fazer bem e comentei-as #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Data { int Dia[500]; int Mes[500]; }DATA ; typedef struct Hora { int hora[500]; int min[500]; }HORA ; typedef struct carro { char matricula[500]; int classe [100] ; int portico[100]; DATA data; HORA hora; }veiculo; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ void inserir (float porticos[20] [5]) // 1 -> aqui nao precisas expecificar o tamanho do array no nivel 1, o 20 e facultativo, { // mas o tamanho para o segundo nivel e obrigatorio e deves passar um array multidimensional // que especificado aqui. int i,j=0,cont=0; for (i=0;i<4;i++){ cont++; printf("Protico %i \n",cont); for (j=0;j<5;j++) { printf("Insiria o preco do classe %i ",j+1); scanf("%f",&porticos[i][j]); // 2 -> o carater "&" e opcional porticos ja e um ponteiro, ja estas a ter acesso a referencia de porticose[i][j] } } } void listar (float porticos[20] [5]) { int i,j,cont=0; for (i=0;i<4;i++) { cont++; printf("Protico %i \n",cont); for (j=0;j<5;j++) { printf("O preco da %i classe e %f\n",j+1,porticos[i][j]); } } system ("Pause"); } void procurar (float portico [20][5]) { int op,op2,i,j; printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> "); scanf ("%i",&op); printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> "); scanf ("%i",&op2); system ("ClS"); i=op-1; j=op2-1; printf("O preco da classe %i do portico %i e %f\n",op2,op,portico[i][j]); system ("Pause"); } void alterar (float porticos [20][5]) { int op,op2,i,j; printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> "); scanf ("%i",&op); system ("ClS"); i=op-1; for (j=0;j<5;j++) { printf("Alterar o preco do classe %i ",j+1); scanf("%f",&porticos[i][j]); // mesma coisa que em 2 } } void inserircarro(veiculo p,int soma){ int cont; printf("%i",soma); cont=soma; printf("Insira a matricula do carro %i\n ",cont+1); scanf ("%s",&p.matricula[cont]); // p.matricula e um ponteiro logo "&" e facultativo printf("Insira o dia \n "); scanf ("%i",&p.data.Dia[cont]); printf("Insira o mes ex('Janeiro corresponde ao 1')\n "); scanf ("%i",&p.data.Mes[cont]); printf("Insira a Hora \n"); scanf ("%i",&p.hora.hora[cont]); printf("Insira os Minutos \n"); scanf ("%i",&p.hora.min[cont]); printf("Insira o Portico\n"); scanf("%i",&p.portico[cont]); printf("Insira a Classe \n "); scanf ("%i",&p.classe[cont]); } void gasto (float porticos [20][5],veiculo p,int soma) { int at=0,i,k,pt,port,l; float gasto; char carro[100]; printf("Insira o carro que quer ver os gasto \n"); scanf ("%s",&carro); // "&" opcional for (i=0;i<=soma;i++) { if (strcmp(carro,p.matricula)==0 ) { at=1; printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->"); scanf("%i",&port); system ("ClS"); for (i=0;i<=soma;i++){ if (strcmp (carro,p.matricula)==0) { l=p.classe[i]; k= l-1; pt=port-1; gasto=gasto+porticos[pt][k]; } } printf("O gasto do carro é %i ",gasto); // deves usar %f para o gasto {see man 3 printf} } else { printf("O carro nao existe"); } } } void ganhoclasse(float porticos [20][5], veiculo p,int soma) { int pot,i,l,k,pt; float ganho=0; printf("%i",soma); printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->"); scanf("%i",&pot); for (i=0;i<soma;i++){ if (pot==p.portico[i]) { l=p.classe[i]; k= l-1; pt=pot-1; ganho=ganho+porticos[pt][k]; } } printf("O Dinheiro do portico %i e %f ",pot,ganho); system ("PAUSE"); } void listarcarros (veiculo p,int soma) { int j; for (j=0;j<soma;j++) { printf("%s",p.matricula[j]); // estas mandar o printf() escrever para STDOUT um string com um inteiro ? WTF? N printf("%i",p.matricula[j]); // ao queres antes escrever a matricula toda? podias faze-lo com '"%s", p.matriculas ' sem indexar o array printf("o dia \n %i ",p.data.Dia[j]); printf(" o mes \n %i",p.data.Mes[j]); printf(" a Hora \n %i",p.hora.hora[j]); printf(" os Minutos %i \n",p.hora.min[j]); printf(" o Portico %i\n",p.portico[j]); printf(" a Classe %i \n ",p.classe[j]); } system ("Pause"); } int main(int argc, char *argv[]) { veiculo p; int op,soma; float porticos [20][5]; do { system ("ClS"); printf(" Escolha a opccao!\n"); printf("1. Inserir os porticos no sistema.\n"); printf("2. Listar a informacao de todos os porticos;\n"); printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n"); printf("4. Alterar os precos de um determinado portico; \n"); printf("5. Inserir uma passagem de um veiculo num portico;\n"); printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n "); printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n"); printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n"); printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n"); printf("10. Saber o número de veiculos que passa em media nos porticos;\n"); printf("0. Sair;\n"); printf("Op ->"); scanf("%i",&op); switch (op){ case 1 : system ("ClS"); inserir(porticos); break; case 2: system ("ClS"); listar(porticos); break; case 3: system ("ClS"); procurar(porticos); break; case 4: system ("ClS"); alterar(porticos); break; case 5: system ("ClS"); inserircarro(p,soma); soma=soma+1; break; case 6: system ("ClS"); gasto (porticos,p,soma); break; case 7: ganhoclasse(porticos,p,soma); break; case 8: listarcarros(p,soma); break; case 9: break; } } while (op!=0); return 0; } Victarion seized the dusky woman by the wrist and pulled her to him. Victarion - She will do it. Go pray to your red god. Light your fire, and tell me what you see. Moqorro's dark eyes seemed to shine. Moqorro - I see dragons. Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
NuGuN 2 Denunciar mensagem Publicado 14 de Janeiro de 2013 Tens razão... falha minha. Nesse caso sem testar o código não estou a ver a razão de não funcionar. Cumps! Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites
HappyHippyHippo 1185 Denunciar mensagem Publicado 14 de Janeiro de 2013 (editado) o problema encontrasse (como sempre) no uso indiscriminado do scanf. bastou fazer a limpeza do buffer de leitura para por tudo a listar correctamente. para não falar no uso da função system, algo que não deveria existir, só complica as coisas ... (se bem que uso no clear screen porque desconfio que gostas disso) código alterado para resolver a tua situação: #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Data { int Dia[500]; int Mes[500]; } DATA ; typedef struct Hora { int hora[500]; int min[500]; }HORA ; typedef struct carro { char matricula[500]; int classe[100] ; int portico[100]; DATA data; HORA hora; } veiculo; #define CLEAR_SCREEN system("clear") #define CLEAR_INPUT while ( getchar() != '\n' ); #define PAUSE CLEAR_INPUT; getchar(); void inserir (float porticos[][5]) { int i,j=0,cont=0; for (i=0;i<4;i++){ cont++; printf("Protico %i \n",cont); for (j=0;j<5;j++) { printf("Insiria o preco do classe %i ",j+1); scanf("%f",&porticos[i][j]); CLEAR_INPUT; } } } void listar (float porticos[][5]) { int i,j,cont=0; for (i=0;i<4;i++) { cont++; printf("Protico %i \n",cont); for (j=0;j<5;j++) printf("O preco da %i classe e %f\n", j+1, porticos[i][j]); } } void procurar (float porticos[][5]) { int op,op2,i,j; printf("Escolha o portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> "); scanf ("%i",&op); CLEAR_INPUT; printf("Escolha a Classe \n Classe 1 \n Classe 2 \n Classe 3\n Classe 4 \n Classe 5\n Escolha-> "); scanf ("%i",&op2); CLEAR_INPUT; CLEAR_SCREEN; i=op-1; j=op2-1; printf("O preco da classe %i do portico %i e %f\n",op2,op,porticos[i][j]); } void alterar (float porticos[][5]) { int op,i,j; printf("Escolha o portico que quer alterar os precos\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n Escolha -> "); scanf ("%i",&op); CLEAR_INPUT; CLEAR_SCREEN; i=op-1; for (j=0;j<5;j++) { printf("Alterar o preco do classe %i ",j+1); scanf("%f",&porticos[i][j]); // mesma coisa que em 2 CLEAR_INPUT; } } void inserircarro(veiculo p,int soma) { int cont; printf("%i",soma); cont=soma; printf("Insira a matricula do carro %i\n ",cont+1); scanf ("%s",&p.matricula[cont]); CLEAR_INPUT; printf("Insira o dia \n "); scanf ("%i",&p.data.Dia[cont]); CLEAR_INPUT; printf("Insira o mes ex('Janeiro corresponde ao 1')\n "); scanf ("%i",&p.data.Mes[cont]); CLEAR_INPUT; printf("Insira a Hora \n"); scanf ("%i",&p.hora.hora[cont]); CLEAR_INPUT; printf("Insira os Minutos \n"); scanf ("%i",&p.hora.min[cont]); CLEAR_INPUT; printf("Insira o Portico\n"); scanf("%i",&p.portico[cont]); CLEAR_INPUT; printf("Insira a Classe \n "); scanf ("%i",&p.classe[cont]); CLEAR_INPUT; } void gasto (float porticos[][5],veiculo p,int soma) { int i,k,pt,port,l; float gasto; char carro[100]; printf("Insira o carro que quer ver os gasto \n"); scanf ("%s", carro); CLEAR_INPUT; for (i=0;i<=soma;i++) { if (strcmp(carro,p.matricula)==0 ) { printf("Qual e portico\n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->"); scanf("%i",&port); CLEAR_INPUT; CLEAR_SCREEN; for (i=0;i<=soma;i++){ if (strcmp (carro,p.matricula)==0) { l=p.classe[i]; k= l-1; pt=port-1; gasto=gasto+porticos[pt][k]; } } printf("O gasto do carro é %f ", gasto); } else { printf("O carro nao existe"); } } } void ganhoclasse(float porticos[][5], veiculo p,int soma) { int pot,i,l,k,pt; float ganho=0; printf("%i",soma); printf("Qual e portico que quer saber o ganho \n Portico 1 \n Portico 2 \n Portico 3\n Portico 4\n ->"); scanf("%i",&pot); CLEAR_INPUT; for (i=0;i<soma;i++) { if (pot==p.portico[i]) { l=p.classe[i]; k= l-1; pt=pot-1; ganho=ganho+porticos[pt][k]; } } printf("O Dinheiro do portico %i e %f ",pot,ganho); } void listarcarros (veiculo p,int soma) { int j; for (j=0;j<soma;j++) { printf("%i",p.matricula[j]); printf("%i",p.matricula[j]); printf("o dia \n %i ",p.data.Dia[j]); printf(" o mes \n %i",p.data.Mes[j]); printf(" a Hora \n %i",p.hora.hora[j]); printf(" os Minutos %i \n",p.hora.min[j]); printf(" o Portico %i\n",p.portico[j]); printf(" a Classe %i \n ",p.classe[j]); } } int main(int argc, char *argv[]) { veiculo p; int op,soma; float porticos [20][5]; do { CLEAR_SCREEN; printf(" Escolha a opccao!\n"); printf("1. Inserir os porticos no sistema.\n"); printf("2. Listar a informacao de todos os porticos;\n"); printf("3. Saber o preco pago num determinado portico por uma classe de veiculos;\n"); printf("4. Alterar os precos de um determinado portico; \n"); printf("5. Inserir uma passagem de um veiculo num portico;\n"); printf("6. Saber o total gasto (em €) por um veiculo, em todos os porticos ao longo dos tempos;\n "); printf("7. Saber, para uma determinada classe de veiculos, o total (em €) recebido num determinado dia, em todos os porticos; \n"); printf("8. Saber, para cada classe de veiculos, o total de veiculos que passaram um determinado portico.\n"); printf("9. Saber o total (em €) recebido num determinado portico num determinado dia;\n"); printf("10. Saber o número de veiculos que passa em media nos porticos;\n"); printf("0. Sair;\n"); printf("Op ->"); scanf("%i",&op); switch (op) { case 1 : CLEAR_SCREEN; inserir(porticos); PAUSE; break; case 2: CLEAR_SCREEN; listar(porticos); PAUSE; break; case 3: CLEAR_SCREEN; procurar(porticos); PAUSE; break; case 4: CLEAR_SCREEN; alterar(porticos); PAUSE; break; case 5: CLEAR_SCREEN; inserircarro(p,soma); soma=soma+1; PAUSE; break; case 6: CLEAR_SCREEN; gasto (porticos, p, soma); PAUSE; break; case 7: CLEAR_SCREEN; ganhoclasse(porticos, p, soma); PAUSE; break; case 8: CLEAR_SCREEN; listarcarros(p,soma); PAUSE; break; case 9: break; } } while (op!=0); return 0; } Editado 14 de Janeiro de 2013 por HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Partilhar esta mensagem Ligação para a mensagem Partilhar noutros sites