Geo Lima 0 Denunciar post Postado Novembro 11, 2007 olá amigos estou aki precisando de uma ajudinha, eu fiz esse codigo em c++, mas não tá rodando e não consigo encontrar o erro de jeito algum, será que poderiam me ajudar a encontrar esse erro? é o seguinte to fazendo um programa que armazene dados em txt, porem fiz um programinha simples que so armazenava um dado apenas e rodou, mas quando acresentei mais de um dado não rodou. merc = rodou já merc,quant,val,preco = não rodou o que eu faço: desde já agradeço abraços code #include <stdio.h> #include <stdlib.h> #include <string.h> #define lim 30 //============================================================================= void insere(char merc[lim],int quant[lim],int val[lim],int preco[lim],int senha) { FILE *fd; //declaração de um ponteiro do tipo arquivo fd = fopen("Farmacia","a");//abre o arquivo farmárcia com anexação fprintf(fd, "%s\n", merc); //escreve mercadoria numa linha de fd fprintf(fd, "%d\n", quant); //escreve quantidade numa linha de fd fprintf(fd, "%d\n", val); //escreve validade numa linha de fd fprintf(fd, "%d\n", preco); //escreve preço numa linha de fd fprintf(stdout, "\n\n\t\t!!!PRODUTO(S) INCLUIDO(S) COM SUCESSO !!!\n");//escreve na tela fclose(fd);//fecha o arquivo getchar(); getchar(); //limpa o buffer e espera o usuario pressionar uma tecla } //============================================================================= void pesquisa(char pesq[]) { FILE *fd; char linha[lim]; int checa=0; fd = fopen("Farmacia","r"); while ((fscanf(fd,"%s",linha))!=EOF) if (!strcmp(linha,pesq)) { printf("\n\t CADASTRO ENCONTRADO>>> "); fscanf(fd,"\n"); checa=1; } else fscanf(fd,"\n\n"); if (checa==0) printf("CADASTRO INEXISTENTE ! TENTE NOVAMENTE!\n"); getchar(); getchar(); fclose(fd); } //============================================================================= void exclusao(char excl[]) { FILE *fd; char linha[lim]; int checa=0; char resp; fd = fopen("Farmacia","r"); while ((fscanf(fd,"%s",linha))!=EOF) if (!strcmp(linha,excl)) { printf("\n\t CADASTRO ENCONTRADO>>> "); printf("\t\tDESEJA REALMENTE EXCLUIR (%s) DA LISTA? S/N"); if (resp == 'S' || 's') //delete(linha) printf("CADASTRO EXCLUIDO COM SUCESSO!!!"); else printf("VOLTANDO..."); fscanf(fd,"\n"); checa=1; } else fscanf(fd,"\n\n"); if (checa==0) printf("CADASTRO INEXISTENTE ! TENTE NOVAMENTE!\n"); getchar(); getchar(); fclose(fd); } //============================================================================= int main(void) { int op,senha; char merc[lim]; int quant[lim]; int val[lim]; int preco[lim]; while (op!=4) { printf(" ************************************************************************\n"); printf(" * *\n"); printf(" * <<< MENU DE OPCOES >>> *\n"); printf(" * *\n"); printf(" *======================================================================*\n"); printf(" * 1 - Incluir MERCADORIAS; *\n"); printf(" * 2 - LISTAGEM; *\n"); printf(" * 3 - Excluir MERCADORIAS; *\n"); printf(" * 4 - ENCERRAR; *\n"); printf(" ************************************************************************\n"); switch (op) { case 1: { { printf("\t INFORME O MEDICAMENTO: "); scanf("%s",merc); insere(merc,senha); } { printf("\t INFORME A QUANTIDADE: "); scanf("%d",quant); insere(quant,senha); } { printf("\t INFORME A DATA DE VALIDADE: "); scanf("%d",val); insere(val,senha); } } printf("\t INFORME O PREÇO"); scanf("%d",preco); insere(preco,senha); } } break; //=========================================================== case 2: { printf("\t INFORME O MEDICAMENTO A PESQUIZAR: "); scanf("%s", merc); pesquisa(merc); } break; //=========================================================== case 3: { printf("\t INFORME O MEDICAMENTO QUE DESEJA EXCLUIR: "); scanf("%s", merc); exclusao(merc) } break; //=========================================================== case 4: { printf("\t !!! PROGRAMA FINALIZANDO !!!"); } break; //=========================================================== default: { printf("\t OPCAO INVALIDA!"); getchar(); getchar(); } } } return(0); } //============================================================================= Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 11, 2007 O erro está aqui: Veja como voce chama a função insere: insere(merc,senha); E veja como ela está definida: void insere(char merc[lim],int quant[lim],int val[lim],int preco[lim],int senha) Concluímos que voce precisa passar todos os valores do insere se não vai dar erro. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Geo Lima 0 Denunciar post Postado Novembro 11, 2007 O erro está aqui: Veja como voce chama a função insere: insere(merc,senha); E veja como ela está definida: void insere(char merc[lim],int quant[lim],int val[lim],int preco[lim],int senha) Concluímos que voce precisa passar todos os valores do insere se não vai dar erro. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif fiz a mudança...mas agora qualquer opção que eu coloco dá inválida... veja #include <stdio.h> #include <stdlib.h> #include <string.h> #define lim 30 //============================================================================== void insere(char merc[lim],int quant[lim],int val[lim],int preco[lim],int senha) { FILE *fd; //declaração de um ponteiro do tipo arquivo fd = fopen("Farmacia","a");//abre o arquivo farmárcia com anexação fprintf(fd, "%s\n", merc); //escreve mercadoria numa linha de fd fprintf(fd, "%d\n", quant); //escreve quantidade numa linha de fd fprintf(fd, "%d\n", val); //escreve validade numa linha de fd fprintf(fd, "%d\n", preco); //escreve preço numa linha de fd fprintf(stdout, "\n\n\t\t!!!PRODUTO(S) INCLUIDO(S) COM SUCESSO !!!\n");//escreve na tela fclose(fd);//fecha o arquivo getchar(); getchar(); //limpa o buffer e espera o usuario pressionar uma tecla } //============================================================================== void pesquisa(char pesq[]) { FILE *fd; char linha[lim]; int checa=0; fd = fopen("Farmacia","r"); while ((fscanf(fd,"%s",linha))!=EOF) if (!strcmp(linha,pesq)) { printf("\n\t CADASTRO ENCONTRADO>>> "); fscanf(fd,"\n"); checa=1; } else fscanf(fd,"\n\n"); if (checa==0) printf("CADASTRO INEXISTENTE ! TENTE NOVAMENTE!\n"); getchar(); getchar(); fclose(fd); } //============================================================================== void exclusao(char excl[]) { FILE *fd; char linha[lim]; int checa=0; char resp; fd = fopen("Farmacia","r"); while ((fscanf(fd,"%s",linha))!=EOF) if (!strcmp(linha,excl)) { printf("\n\t CADASTRO ENCONTRADO>>> "); printf("\t\tDESEJA REALMENTE EXCLUIR (%s) DA LISTA? S/N"); if (resp == 'S' || 's') //delete(linha) printf("CADASTRO EXCLUIDO COM SUCESSO!!!"); else printf("VOLTANDO..."); fscanf(fd,"\n"); checa=1; } else fscanf(fd,"\n\n"); if (checa==0) printf("CADASTRO INEXISTENTE ! TENTE NOVAMENTE!\n"); getchar(); getchar(); fclose(fd); } //============================================================================== int main(void) { int op,senha; char merc[lim]; int quant[lim]; int val[lim]; int preco[lim]; while (op!=4) { printf("ESCOLHA A OPCAO: 1-2-3-4: "); scanf("%s",op); switch (op) { case 1: { printf("\t INFORME O MEDICAMENTO: "); scanf("%s",merc); printf("\t INFORME A QUANTIDADE: "); scanf("%d",quant); printf("\t INFORME A DATA DE VALIDADE: "); scanf("%d",val); printf("\t INFORME O PREÇO"); scanf("%d",preco); insere(merc,quant,val,preco,senha); } break; //=========================================================== case 2: { printf("\t INFORME O MEDICAMENTO A PESQUIZAR: "); scanf("%s", merc); pesquisa(merc); } break; //=========================================================== case 3: { printf("\t INFORME O MEDICAMENTO QUE DESEJA EXCLUIR: "); scanf("%s", merc); exclusao(merc); } break; //=========================================================== case 4: { printf("\t !!! PROGRAMA FINALIZANDO !!!"); } break; //=========================================================== default: { printf("\t OPCAO INVALIDA!"); getchar(); getchar(); } } } return(0); } //============================================================================== abraços Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 11, 2007 Altere essa linha aqui: scanf("%s",op); para scanf("%d",&op); Compartilhar este post Link para o post Compartilhar em outros sites
Geo Lima 0 Denunciar post Postado Novembro 11, 2007 eh eu percebi esse erro antes de você responder e mudei...mas mesmo assim nada... p**** esse treco ta complicado viu Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 11, 2007 Porque voce usa vetor de inteiros? int quant[lim] é necessário mesmo? Compartilhar este post Link para o post Compartilhar em outros sites
Geo Lima 0 Denunciar post Postado Novembro 11, 2007 vou mudar char Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 11, 2007 Ok, não esqueça de mudar tudo. as referencias de leitura em scanf para %s as referencias da função insere. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
Geo Lima 0 Denunciar post Postado Novembro 11, 2007 vlw kara funcionou legal, mas agora tenho outra duvida. se puder ajudar como faço pra exclui um dado do arquivo, qual comando que eu devo usar? vlw até mais Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 11, 2007 Uma maneira é: Leia um dado do arquivo e escreva uma string vazia em seu lugar. Outra maneira é: Rescreever o arquivo todo, ou seja, ler dado por dado e usar o if para identificar o que não deseja gravar. Compartilhar este post Link para o post Compartilhar em outros sites
Geo Lima 0 Denunciar post Postado Novembro 11, 2007 então mas isso mesmo é o que não consigo, como faço essa subistituição para uma string vazia? flw abraço Compartilhar este post Link para o post Compartilhar em outros sites
Kandrade 7 Denunciar post Postado Novembro 12, 2007 Para identificar a string que deseja excluir acho que é simples, se voce tiver dúvidas é só perguntar. Use if e strcmp a cada linha lida do arquivo. Quando encontrar a linha que deseja apagar voce precisa calcular o tamanho da string lida. Imagina que voce leu: anador O ponteiro do arquivo está deslocado para a próxima linha, mas voce precisa retrocede-lo para fazer a substituição. Isso voce pode fazer com a função fseek. leia sobre fseek aqui: http://www.vivaolinux.com.br/artigos/verAr...16&pagina=3 Retroceder o ponteiro do arquivo para início da string e então substituir a string "anador" por uma de mesmo tamanho, mas cheia de espaços. ;) Compartilhar este post Link para o post Compartilhar em outros sites