Wolverine Postado 26 de outubro de 2011 Denunciar Compartilhar Postado 26 de outubro de 2011 Pessoal eu nao consigo gravar os clientes cadastrados!!! alguem pode me ajudar????? /* SoluÁ„o com uso somente do programa principal - main */ #include <stdio.h> #include <stdlib.h> struct cliente { char nome[80]; char end[80]; char cidade[40]; char estado[40]; char cep[20]; // restante da estrutura }; int main() { int i, j, n, op; struct cliente cli[100]; i=0; printf ("Quantos clientes deseja cadastrar? "); scanf ("%d",&n); fflush(stdin); do{ system ("CLS"); // Tem a mesma funcao do clrscr() - Limpa tela printf("=====================================\n"); printf("\n\n1 - Criar cadastro\n"); printf("2 - Mostrar cadastro\n"); printf("3 - Gravar cadastro em arquivo\n"); printf("4 - Encerrar o programa\n\n"); printf("\nEscolha uma opcao: "); scanf("%d", &op); printf("=====================================\n"); switch (op) { case 1: { // Caso se deseje cadastrar cliente if (i==n) { printf("\nJa cadastrou todos os clientes possiveis!\n\n"); system("PAUSE"); } else { printf("\n=====================================\n"); printf("Dados do cliente %d : \n", i+1); printf("=====================================\n"); fflush(stdin); // Limpa buffer do teclado printf("Nome: "); gets(cli.nome); fflush(stdin); // Limpa buffer do teclado printf("Endereco: "); gets(cli.end); fflush(stdin); printf("Cidade: "); gets(cli.cidade); fflush(stdin); printf("Estado: "); gets(cli.estado); fflush(stdin); printf("CEP: "); gets(cli.cep); printf("=====================================\n\n"); i=i+1; printf("Pode-se cadastrar mais %d clientes!\n\n", n-i); system("PAUSE"); }; break; } //case 1 case 2: { // Mostra a ultima situacao do cadastro de clientes if (i!=0) for (j=0; j<i; j++) { printf("\n=====================================\n"); printf("Dados cliente %d : \n",j+1); printf("=====================================\n"); printf("Nome: %s\n",cli[j].nome); printf("Endereco: %s\n",cli[j].end); printf("Cidade: %s\n",cli[j].cidade); printf("Estado: %s\n",cli[j].estado); printf("CEP: %s\n\n",cli[j].cep); printf("=====================================\n\n"); } else printf("Nao ha clientes cadastrados!\n\n"); system("PAUSE"); break; } //case 2 case 3: { // Grava arquivo com ultima atualizaÁ„o dos clientes FILE *ptrARQ; //cria um ponteiro para um arquivo // Testa se eh possivel abrir o arquivo if ((ptrARQ = fopen("c:RQCLI.DAT","w"))==NULL) printf("\n\nNao foi possivel criar o arquivo!\n\n"); else if (i!=0) { for (j=0; j<i; j++) { fprintf(ptrARQ, "\n=====================================\n"); fprintf(ptrARQ, "Dados cliente %d : \n",j+1); fprintf(ptrARQ, "=====================================\n"); fprintf(ptrARQ, "Nome: %s\n",cli[j].nome); fprintf(ptrARQ, "Endereco: %s\n",cli[j].end); fprintf(ptrARQ, "Cidade: %s\n",cli[j].cidade); fprintf(ptrARQ, "Estado: %s\n",cli[j].estado); fprintf(ptrARQ, "CEP: %s\n\n",cli[j].cep); fprintf(ptrARQ, "=====================================\n\n"); } fclose(ptrARQ);//fecha o arquivo criado printf("\n\n\n Gravando arquivo...Operacao concluida com sucesso\n\n"); } else { printf("Nao ha clientes cadastrados!\n\n"); fclose(ptrARQ);//fecha o arquivo criado } system("PAUSE"); break; } //case 3 case 4: { // Antes e¥ preciso gravar arquivo com ultima atualizaÁ„o dos clientes FILE *ptrARQ; //cria um ponteiro para um arquivo // Testa se eh possivel abrir o arquivo if ((ptrARQ = fopen("c:RQCLI.DAT","w"))==NULL) printf("\n\nNao foi possivel criar o arquivo!\n\n"); else if (i!=0) { for (j=0; j<i; j++) { fprintf(ptrARQ, "\n=====================================\n"); fprintf(ptrARQ, "Dados cliente %d : \n",j+1); fprintf(ptrARQ, "=====================================\n"); fprintf(ptrARQ, "Nome: %s\n",cli[j].nome); fprintf(ptrARQ, "Endereco: %s\n",cli[j].end); fprintf(ptrARQ, "Cidade: %s\n",cli[j].cidade); fprintf(ptrARQ, "Estado: %s\n",cli[j].estado); fprintf(ptrARQ, "CEP: %s\n\n",cli[j].cep); fprintf(ptrARQ, "=====================================\n\n"); } fclose(ptrARQ);//fecha o arquivo criado printf("\n\n\n Gravando arquivo...Operacao concluida com sucesso\n\n"); } else { printf("Nao ha clientes cadastrados!\n\n"); fclose(p3trARQ);//fecha o arquivo criado } system("PAUSE"); printf("\n\n FIM DA EXECUCAO!\n\n"); } //case 4 } // switch (op) } while (op != 4); system("PAUSE"); return 0; } Citar Link para o comentário Compartilhar em outros sites More sharing options...
Maddo Garan Postado 26 de outubro de 2011 Denunciar Compartilhar Postado 26 de outubro de 2011 Dá mais detalhes. Ele compila na boa, mostra algum warning? o que mostra na saída? Citar Link para o comentário Compartilhar em outros sites More sharing options...
Maddo Garan Postado 26 de outubro de 2011 Denunciar Compartilhar Postado 26 de outubro de 2011 (editado) Os arquivos chegam a ser criados? Editado 26 de outubro de 2011 por Maddo Garan Citar Link para o comentário Compartilhar em outros sites More sharing options...
Wolverine Postado 27 de outubro de 2011 Autor Denunciar Compartilhar Postado 27 de outubro de 2011 Os arquivos chegam a ser criados? Os arquivos sao criados!!! mas eu nao consigo gravar !!!! esta o problema esta aqui!! if ((ptrARQ = fopen("c:RQCLI.DAT","w"))==NULL) este comando no windows funciona, ele é um diretorio especifico na memoria, agora no lion eu nao sei como gravar isto!!! entende??? obrigado pela resposta Citar Link para o comentário Compartilhar em outros sites More sharing options...
Maddo Garan Postado 27 de outubro de 2011 Denunciar Compartilhar Postado 27 de outubro de 2011 (editado) se apenas tirar o "c:" não funciona? fiz um programa pequeno com criação de arquivo, usei o teu teste - sem o c: - e funcionou. Editado 27 de outubro de 2011 por Maddo Garan Citar Link para o comentário Compartilhar em outros sites More sharing options...
Wolverine Postado 8 de novembro de 2011 Autor Denunciar Compartilhar Postado 8 de novembro de 2011 se apenas tirar o "c:" não funciona? fiz um programa pequeno com criação de arquivo, usei o teu teste - sem o c: - e funcionou. Entao... o problema inicial foi resolvido de fato era o erro mas agora estou com outro dentro do mesmo trabalho!! Alguem sabe como resolver este problema ???? o sistema fala que nao é seguro usar o gets( ) !! Seguro????? o sistema varia, é isto???obrigado pela atencao Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 8 de novembro de 2011 Denunciar Compartilhar Postado 8 de novembro de 2011 Entao... o problema inicial foi resolvido de fato era o erro mas agora estou com outro dentro do mesmo trabalho!! Alguem sabe como resolver este problema ???? o sistema fala que nao é seguro usar o gets( ) !! Seguro????? o sistema varia, é isto???obrigado pela atencao Usa fgets() em vez, porque com gets() você não tem como determinar o tamanho da entrada, o que pode acarretar em problemas de overflow e afins. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Wolverine Postado 10 de novembro de 2011 Autor Denunciar Compartilhar Postado 10 de novembro de 2011 Usa fgets() em vez, porque com gets() você não tem como determinar o tamanho da entrada, o que pode acarretar em problemas de overflow e afins. Olá Gabriel tudo bem??? Eu tentei fazer oq vc falou de colocar o fgets() . mas o sistema nao reconhece este comando!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel Vincent Postado 10 de novembro de 2011 Denunciar Compartilhar Postado 10 de novembro de 2011 Olá Gabriel tudo bem??? Eu tentei fazer oq vc falou de colocar o fgets() . mas o sistema nao reconhece este comando!! Talvez você tenha que incluir alguma biblioteca que no momento não sei dizer qual é. Bom, outra solução, então é essa: scanf("%[^\n]", variavel_do_tipo_char) Isso é como um %s, só que lê tudo o que for digitado no teclado até que seja apertado "enter". Significa literalmente: Leia (%) tudo (^) que for digitado até o pressionamento da tecla enter (\n). E como você vai ler um vetor de chars, não precisa colocar o &, pois vetores têm múltpilos endereços na memória. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Wolverine Postado 11 de novembro de 2011 Autor Denunciar Compartilhar Postado 11 de novembro de 2011 Talvez você tenha que incluir alguma biblioteca que no momento não sei dizer qual é. Bom, outra solução, então é essa: scanf("%[^\n]", variavel_do_tipo_char) Isso é como um %s, só que lê tudo o que for digitado no teclado até que seja apertado "enter". Significa literalmente: Leia (%) tudo (^) que for digitado até o pressionamento da tecla enter (\n). E como você vai ler um vetor de chars, não precisa colocar o &, pois vetores têm múltpilos endereços na memória. Entendo... Gabriel quais as bibliotecas vc usa no xcode ???? algum tutorial ,dica qualquer coisa, por favor .scanf eu nao posso usar por causa do _ entende??? eu tb acredito q seje algum conflito entre biblioteca , oq eu nao entendo é pq o sistema nao bloqueia e fala o problema com clareza . obrigado pela ajuda Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel M Couto Postado 11 de novembro de 2011 Denunciar Compartilhar Postado 11 de novembro de 2011 Entendo... Gabriel quais as bibliotecas vc usa no xcode ???? algum tutorial ,dica qualquer coisa, por favor .scanf eu nao posso usar por causa do _ entende??? eu tb acredito q seje algum conflito entre biblioteca , oq eu nao entendo é pq o sistema nao bloqueia e fala o problema com clareza . obrigado pela ajuda fgets faz parte do stdioSolução que fiz pra ti: http://pastebin.com/rFwMaTKp Deve funcionar tanto em mac quanto windows... porém não há limpeza de tela nem pause para enter. Afinal não existe CLS nem PAUSE no OS X. Tu pode usar CLEAR no lugar do CLS, mas precisa de uma solução elegante para substituir o PAUSE... mas aí precisa ir para o C++. Usa fgets perfeitamente, e é uma das maneiras mais elegantes para se receber entradas separadas por enter(fgets e depois filtra com sscanf) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe do debate
Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.