Ir para conteúdo
  • Cadastre-se

Problema dificil !alguem pode me ajudar?


Posts Recomendados

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;

}

Link para o comentário
Compartilhar em outros sites

  • Respostas 10
  • Criado
  • Última resposta

Top Postadores Neste Tópico

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

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

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

post-16356-0-72748900-1320757453_thumb.p

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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

Link para o comentário
Compartilhar em outros sites

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

:blink: fgets faz parte do stdio

Soluçã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)

Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



  • Estatísticas do Fórum

    • Total de Tópicos
      56.5k
    • Total de Posts
      466.2k
×
×
  • Criar Novo...