Whiteangel Posted January 3, 2016 at 03:00 PM Report Share #591248 Posted January 3, 2016 at 03:00 PM Boas pessoal podem me ajudar a eliminar um registo num ficheiro, o registo é para eliminar por um codigo, mas o código contem letras e numeros. Podem ver o que estou a fazer de errado é que nem esta a entrar no ciclo for.. void eliminar() { char estado = 'A'; char c; int n; printf("\t\Codigo da disciplina ? "); scanf("%s", c); ficheiro = fopen("disciplinas.DAT","r+b"); if (ficheiro == NULL) { printf("\nErro ao abrir o ficheiro\n"); return; } fseek(ficheiro, 0, SEEK_END); n = ftell(ficheiro) / sizeof(a); fseek(ficheiro, 0, SEEK_SET); int pos = 0; int i; for (i = 0; i < n; i++) { fread(&a, sizeof(a), 1, ficheiro); if (a.estado == 'A'){ if (strcmp(a.CdDis) == c){ pos = i; printf("\n\t\tNome da disciplina: %s\n",a.NmDis); printf("\t\tSemestre: %s\n",a.semestre); printf("\t\Ano: %d\n",a.ano); break; } } } if (i < n) { int v; printf("\n\t\tPretende realmente eliminar a disciplina?\n"); printf("\t\t 1 - Sim \t 0 - Nao\n"); printf("\t Opcao: "); scanf("%d", & v); if (v == 0){ return; }else { fseek(ficheiro, pos * sizeof(a), SEEK_SET); a.estado = 'E'; fwrite(&a, sizeof(a), 1, ficheiro); printf("\neliminada com sucesso.\n"); } fclose(ficheiro); } } Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 3, 2016 at 06:04 PM Report Share #591257 Posted January 3, 2016 at 06:04 PM afinal queres ler um caracter ou uma string ? char c; // ... scanf("%s", c); IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Whiteangel Posted January 3, 2016 at 07:25 PM Author Report Share #591259 Posted January 3, 2016 at 07:25 PM afinal queres ler um caracter ou uma string ? char c; // ... scanf("%s", c); O codigo contem varios caracteres e numero (por exemplo: 15LO56 ou 15K3C5) Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 3, 2016 at 07:41 PM Report Share #591261 Posted January 3, 2016 at 07:41 PM se queres ler uma string, então tens de ter um local apropriado para a guardar #define MAX_SIZE 32 // ... char buffer[MAX_SIZE]; scanf("%s", buffer); nota : existe outras maneiras de ler strings mas não quero complicar agora IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Whiteangel Posted January 3, 2016 at 07:52 PM Author Report Share #591263 Posted January 3, 2016 at 07:52 PM se queres ler uma string, então tens de ter um local apropriado para a guardar #define MAX_SIZE 32 // ... char buffer[MAX_SIZE]; scanf("%s", buffer); nota : existe outras maneiras de ler strings mas não quero complicar agora Colocei depois o if assim if (a.CdDis == buffer) e continua a não funcionar Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 3, 2016 at 08:07 PM Report Share #591264 Posted January 3, 2016 at 08:07 PM o melhor é mesmo leres a documentação da função strcmp : http://linux.die.net/man/3/strcmp IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Whiteangel Posted January 3, 2016 at 08:16 PM Author Report Share #591265 Posted January 3, 2016 at 08:16 PM (edited) o melhor é mesmo leres a documentação da função strcmp : http://linux.die.net/man/3/strcmp esta questao resolvido if (strcmp(a.CdDis, buffer) == 0) esta questao resolvido if (strcmp(a.CdDis, buffer) == 0) Mas eu uso um estado, que é para se voltarem a digitar um codigo ja eliminado ele não aparecer, mas não esta a funcionar if (a.estado == 'A'){ Edited January 3, 2016 at 08:17 PM by Whiteangel Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 3, 2016 at 08:18 PM Report Share #591266 Posted January 3, 2016 at 08:18 PM faz a limpeza do buffer de leitura IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Whiteangel Posted January 3, 2016 at 08:19 PM Author Report Share #591268 Posted January 3, 2016 at 08:19 PM faz a limpeza do buffer de leitura Com o : fflush(stdin) ?? Onde o posso localizar? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted January 3, 2016 at 11:05 PM Report Share #591275 Posted January 3, 2016 at 11:05 PM pesquisa na net sobre o problema (deste fórum também) a sua necessidade e maneira de usar depende sempre da maneira como estás a ler os dados IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now