Ir para o conteúdo

Pesquisar na Comunidade

A mostrar resultados para tags ''ficheiros''.



Mais opções de pesquisa

  • Pesquisa por Tags

    Introduza as tags separadas por vírgulas.
  • Pesquisar por Autor

Tipo de Conteúdo


Fórum

  • Bem-vindos ao Portugal-a-Programar
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Wiki P@P
    • Apresentação de Projectos de Programação
    • Downloads
  • Revista PROGRAMAR
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Haskell
    • Pascal
    • Python
    • Bases de Dados
    • Visual Basic Clássico
    • Visual Basic for Applications (VBA)
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • SharePoint
    • Apresentação de Software
  • Informática Extra-Programação
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica
    • Automação Industrial
    • Dúvidas e Discussão de Programação
    • Notícias de Tecnologia
  • Outras Áreas
    • Matemática
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categorias

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Procurar resultados em...

Pesquisar conteúdos que contêm...


Data de Publicação

  • Início

    Fim


Última Actualização

  • Início

    Fim


Filtrar por número de...

125 resultados

  1. riqu3s

    Copiar dados de ficheiro bin para txt

    Boas pessoal, Tenho de fazer uma função que copie, de um ficheiro binário para um de texto, os "id's" de vários clientes correspondentes à venda de bilhetes de uma determinada sessão de cinema. Ainda não criei código, mas pensei em 2 formas de fazer: 1. Abrir o ficheiro binário, copiar 1 a um 1, colocar num vetor de inteiros e de seguida colocá-lo no ficheiro de texto. 2. Manter os 2 ficheiros abertos (não sei se é possível) e copiar os "id's" diretamente para o ficheiro de texto. Se puderem ajudar a escolher qual das técnicas é mais eficaz Obrigado
  2. miguel__1

    Apagar linha de ficheiro txt

    Boas, estou com um problema que não estou a conseguir resolver. Sem nada anteriomente definido e apenas recebendo o ficheiro e o nome a remover tenho que eliminar toda essa linha do ficheiro txt. Como poderia resolver? O Ficheiro é o seguinte: Comfortably Numb;Pink Floyd;6:53;1979 Money For Nothing;Dire Straits;4:59;1985 By The Way;Red Hot Chili Peppers;3:37;2002 The Pretender;Foo Fighters;4:30;2007 Kashmir;Led Zeppelin;8:31;1975 Desde já obrigado.
  3. riqu3s

    Listar a partir de ficheiro txt

    Boas pessoal, no programa que estou a tentar fazer já consigo registar um cliente e escrever os dados num ficheiro de texto, mas quando tenciono listar todos os clientes ou algum específico através do NIF, dá um erro e não apresenta nada do que é suposto... se alguém me puder ajudar #include <stdio.h> #include <stdlib.h> #include <string.h> // biblioteca de funções de strings #include <ctype.h> // para usar o toupper() #include "structs.h" // ficheiro onde estão as structs typedef struct { char nome[50], sexo[30], username[30]; int idade, nif, id; } CLIENTE; void syst() { // função para parar o sistema system("pause"); system("cls"); } FILE* abrir_ficheiro(char caminho[], char modo) { // função para abrir o ficheiro de texto FILE *file; switch (toupper(modo)) { // coloca o modo em letras maiusculas case 'W': file = fopen(caminho, "w"); // w - write break; case 'R': file = fopen(caminho, "r"); // r - read break; case 'A': file = fopen(caminho, "a"); // a - append break; } if (file == NULL) { puts("Falha na abertura do ficheiro!"); exit(0); } return file; } void guardar_ficheiro(CLIENTE cliente) { // função para guardar dados no ficheiro FILE *file; file = abrir_ficheiro("clientes.txt", 'a'); // abre o ficheiro para acrescentar fprintf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // escreve no ficheiro o nome, idade, sexo e nif fclose(file); printf("Registo efetuado com sucesso!\n"); syst(); } void mostrar() { // função para mostrar um cliente específico CLIENTE cliente; FILE *file; file = abrir_ficheiro("clientes.txt", 'r'); while (!feof(file)) { //enquanto não chegar ao fim do ficheiro fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); // lê do ficheiro o nome, idade, sexo e nif printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); } fclose(file); syst(); } void mostrar_especifico() { CLIENTE cliente; FILE *file; char username[30]; int opcao, verif_nif, cont = 0; printf("Informe o NIF do cliente: "); fflush(stdin); scanf(" %d", &verif_nif); file = abrir_ficheiro("clientes.txt", 'r'); while(!feof(file)) { fscanf(file, "%s %d %s %d\n", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); if(cliente.nif == verif_nif) { printf("CLIENTE: %s\nIDADE: %d\nSEXO: %s\nNIF: %d", cliente.nome, cliente.idade, cliente.sexo, cliente.nif); cont++; } } fclose(file); if(cont == 0); printf("\nO NIF informado nao esta registado"); syst(); } int menu() { int opcao; do { puts("MENU: "); puts("1 - REGISTAR CLIENTE"); puts("2 - LISTAR TODOS OS CLIENTES"); puts("3 - LISTAR CLIENTE ESPECIFICO"); puts("0 - SAIR"); printf("OPCAO: "); scanf("%d", &opcao); if (opcao < 0 || opcao > 3) { puts("\nOPCAO INVALIDA, TENTE NOVAMENTE!"); syst(); } } while (opcao < 0 || opcao > 3); system("cls"); return opcao; } void registar(CLIENTE *cliente) { int opcao; do { printf("NOME: "); fflush(stdin); gets(cliente->nome); do { printf("SEXO: [1] - Masculino\t[2] - Feminino\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 1) { strcpy(cliente->sexo, "Masculino"); } else { if (opcao == 2) { strcpy(cliente->sexo, "Feminino"); } else { printf("Opcao Invalida!\n"); } } } while (opcao != 1 && opcao != 2); printf("Idade: "); scanf("%d", &cliente->idade); fflush(stdin); printf("NIF: "); scanf("%d", &cliente->nif); printf("\nConfirma todas as informacoes?\n[1] Sim\t[2] Nao\n"); printf("Opcao: "); scanf("%d", &opcao); if (opcao == 2) syst(); }while(opcao != 1); syst(); } void main() { CLIENTE cliente; while(1) { switch(menu()) { case 1: registar(&cliente); guardar_ficheiro(cliente); break; case 2: mostrar(); break; case 3: mostrar_especifico(); break; default: puts("Finalizando o programa..."); exit(0); } } }
  4. riqu3s

    Guardar dados em ficheiro txt

    Boas pessoal, estou a tentar criar uma função que guarde os dados de um cliente (neste momento apenas o nome), mas sempre que executo o programa os dados ficam guardados em binário. se me poderem ajudar a descobrir onde estou a errar... deixo a função que fiz em baixo void registar_cliente() { FILE *arq_clientes = fopen("clientes.txt", "w"); if (arq_clientes == NULL) { printf("\nErro ao abrir o ficheiro!\n"); exit(1); // aborta o programa } int cont_bytes = 0; //o ID do cliente deve ser gerado automaticamente // cont irá guardar o número total de bytes fseek(arq_clientes, 0, SEEK_END); // o ponteiro aponta para o final do ficheiro cont_bytes = ftell(arq_clientes); // ftell devolve a posiçao atual em bytes t_cliente cliente; if(cont_bytes == 0) { cliente.id = 1; } else { t_cliente ultimo_cliente; fseek(arq_clientes, cont_bytes - sizeof (t_cliente), SEEK_SET); //cont_bytes - sizeof(t_cliente) serve para posicionar // para que possamos chegar ao último cliente registado fread(&ultimo_cliente, sizeof (t_cliente), 1, arq_clientes); cliente.id = ultimo_cliente.id + 1; // o ID do cliente é o ID do último cliente acrescido em 1 } printf("\nDigite o nome do cliente: "); scanf("%99[^\n]%*c", cliente.nome); // ^\n indica para pegar até a quebra de linha (enter) fflush(stdin); fseek(arq_clientes, 0, SEEK_END); fwrite(&cliente, sizeof (t_cliente), 1, arq_clientes); // escreve no arquivo fclose(arq_clientes); printf("\nCliente \"%s\" cadastrado com sucesso!\n", cliente.nome); printf("\nPressione <Enter> para continuar..."); scanf("%*c"); fflush(stdin); }
  5. LadyCiaradh

    Extrair dados Ficheiro.txt

    Eu tenho esta função que lê cada linha de um ficheiro e atribui a uma posição de um array (que eu tenho definido na classe) mas aparece-me um erro ao executar no i++; (linha 9) que diz isto: "System.NullReferenceException: 'A referência de objecto não foi definida como uma instância de um objecto.'" int GetData() { int i = 0; StreamReader sr = new StreamReader("pw.txt"); string line; while ((line = sr.ReadLine()) != null) { majorData[i] = line; i++; } sr.Close(); return i; } Alguém sabe como resolvo?
  6. davidcbbc

    Ler linhas de ficheiro TXT

    Olá , tenho andado a programar umas coisas em C e precisava de um código que me lê-se coisas do ficheiro txt ignorado outras: por exemplo , tenho isto no ficheiro txt: nome: teste1 local: porto Queria dar output só de "teste1" e "porto" No entanto , eu arranjei um código que me fornece essa informação: int main(){ char linha[1020]; char teste1[1020]; char teste2[1020]; FILE *fp; fp= fopen("cinemas.txt", "r"); fgets(linha,sizeof(linha),fp); linha[strlen(linha)-1]=0; strcpy(teste1, &linha[6]); fgets(linha,sizeof(linha),fp); linha[strlen(linha)-1]=0; strcpy(teste2, &linha[7]); printf("%s\n",teste1); printf("%s",teste2); fclose(fp); return 0; } Mas não percebo o porquê dele funcionar! supostamente o sizeof() contava o número de bytes que a memória estava a guardar para a string . Se alguém me esclarecesse detalhadamente este código ficava imensamente grato!
  7. miguel__1

    [Resolvido] Passar info de txt para lista ligada

    Boas malta, estou com uns problemas para passar a informação de um ficheiro txt para uma lista ligada. O ficheiro de texto está assim: nome Nascimento 2 consultas tipo cnsulta - data - medico tipo cnsulta - data - medico nome Nascimento 0 consultas e a minha estrutura está: typedef struct{ int dia, mes, ano; } info; struct consulta { char nome_medico[50]; char tipo_consulta[20]; char especialidade[50]; int dia; int mes; int ano; pConsulta prox; }; struct paciente { char nome[50]; //char apelido[50]; //char num_consultas; int num_consultas; // data de nascimento info data_nascimento; // historico consultas pConsulta lista; pPaciente prox; }; Agora o meu problema é passar a infomação para a lista ligada.
  8. Boa tarde! Estou a fazer um trabalho em linguagem `C`, onde tenho de mostrar na consola a informação guardada num ficheiro de texto, mas é obrigatório passar toda a informação para `vetores` dinâmicos de estruturas. Eu penso já ter conseguido feito alguma coisa, mas quando tento guardar a especialidade numa `variável`, o ficheiro acaba por guardar as palavras seguintes. Ex: O `v->nome` está a guardar "Joao Silva" e o `v->especialidade` está a guardar "Neurologia 9.30 - 17.00" e eu pretendo guardar apenas "Neurologia". Alguém me consegue ajudar? struct hora_entrada{int horas, minutos;}; struct hora_saida{int horas, minutos;}; typedef struct medico med, *p_med; struct medico{ char nome[ST_TAM]; char especialidade[ST_TAM]; struct hora_entrada h_e; struct hora_saida h_s; }; int le_dados (){ FILE *f, *g; med *v; f=fopen("medico.txt", "rt"); g=fopen("paciente.txt", "rt"); if (f==NULL || g==NULL){ printf("Erro no acesso ao ficheiro.\n"); return 0; } v=malloc(sizeof(med)); if (v==NULL){ printf("Erro na alocaçao de memoria.\n"); return 0; } while ((fscanf(f,"%49[^\n] %49[^\n]",v->nome, v->especialidade))==2 ) printf("%s\n%s",v->nome, v->especialidade); fclose(f); }
  9. joanacs

    Como procurar um elemento num vetor de estruturas?

    Boa noite! Estou a fazer um trabalho em ´C´ onde tenho de procurar médicos por especialidade, ou seja, pergunto ao utilizador o nome da especialidade a procurar e faço um ´printf´ dos médicos dessa especialidade. Eu tentei fazer isso mas dá-me sempre "Especialidade inexistente." mesmo procurando por uma especialidade que sei que está no ficheiro. Alguém me consegue ajudar? Até agora o meu código é este: struct hora_entrada{int horas, minutos;}; struct hora_saida{int horas, minutos;}; typedef struct medico med, *p_med; struct medico{ char nome[ST_TAM]; char especialidade[ST_TAM]; struct hora_entrada h_e; struct hora_saida h_s; p_med prox; }; struct data_nasc{int dia, mes, ano;}; struct historico{ char grau[ST_TAM]; int d_dia; int d_mes; int d_ano; char nome[ST_TAM]; }; typedef struct paciente pac, *p_pac; struct paciente{ char nome[ST_TAM]; struct data_nasc d_n; int consultas; struct historico h; p_pac prox; }; //------------------------------------------------------------------ //Listagem completa de medicos e pacientes int le_dados (){ FILE *f, *g; med *v; pac *a; int i; f=fopen("medico.txt", "rt"); g=fopen("paciente.txt", "rt"); if (f==NULL || g==NULL){ printf("Erro no acesso ao ficheiro.\n"); return 0; } v=malloc(sizeof(med)); a=malloc(sizeof(pac)); if (v==NULL || a==NULL){ printf("Erro na alocaçao de memoria.\n"); return 0; } med *listaMedicos = v; //a lista começa no v, o primeiro médico med *antMed = NULL; printf("\nMEDICOS\n"); while (fscanf(f,"%49[^\n] %49s %d.%d - %d.%d\n",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos )==6 ){ printf("%s\n%s %d.%d %d.%d\n",v->nome, v->especialidade, v->h_e.horas, v->h_e.minutos, v->h_s.horas, v->h_s.minutos); v->prox = malloc(sizeof(med)); //aloca um nó para o próximo médico antMed = v; //ponteiro para o médico antes do fim v=v->prox; } if (antMed == NULL){ //não deu para ler nenhum médico, libertar o único nó alocado free(listaMedicos); listaMedicos = NULL; //por o a apontar para NULL para a impressão funcionar } else{ free(antMed->prox); //libertar o último médico alocado que não foi utilizado antMed->prox = NULL; //por a apontar para NULL para a impressão funcionar } pac *listaPacientes = a; //a lista começa no a, o primeiro paciente pac *antPac = NULL; printf("\n\nPACIENTES\n"); while (fscanf(g,"%49[^\n] %d-%d-%d %d",a->nome, &a->d_n.dia, &a->d_n.mes, &a->d_n.ano, &a->consultas)==5){ printf("Nome: %s\nData de nascimento: %d-%d-%d\nConsultas: %d\n",a->nome, a->d_n.dia, a->d_n.mes, a->d_n.ano, a->consultas); for(i=0;i<a->consultas;i++){ fscanf(g,"%s - %d/%d/%d - %[^\n]\n",a->h.grau, &a->h.d_dia, &a->h.d_mes, &a->h.d_ano, &a->h.nome); printf("\t%s %d/%d/%d %s\n",a->h.grau, a->h.d_dia, a->h.d_mes, a->h.d_ano, a->h.nome); } a->prox = malloc(sizeof(pac)); //alocar um nó para o próximo paciente antPac = a; //ponteiro para o paciente antes do fim a = a->prox; } if (antPac == NULL){ //não deu para ler nenhum paciente, libertar o único nó alocado free(listaPacientes); listaPacientes = NULL; //por a apontar para NULL para a impressão funcionar } else{ free(antPac->prox); //libertar o ultimo paciente alocado que não foi utilizado antPac->prox = NULL; //por a apontar para NULL para a impressão funcionar } fclose(f); } //Pesquisar médicos por especialidade int pesquisa (p_med v){ char *esp; printf("Insira uma especialidade a pesquisar:\n"); scanf("%s", &esp); while (v!=NULL && v->especialidade!=esp) v=v->prox; if (v!=NULL) printf("%s\n",v->nome); else printf("Especialidade inixestente.\n"); }
  10. Versão

    9498 downloads

    Instituto Politécnico de Viana do Castelo Escola Superior de Técnologia e Gestão Algoritmos e Estruturas de Dados Autor: Filipe Marques Conteúdo Cap. 2 - Introdução Cap. 3 - Tipos de Dados Básicos Cap. 4 - Testes e Condições Cap. 5 - Ciclos Cap. 6 - Arrays Cap. 7 - Strings Cap. 8 - Estruturas Cap. 9 - Funções Cap. 10 - Parâmetros das Funções Cap. 13 - Apontadores Cap. 17 - Ficheiros
  11. joanacs

    Problema com fscanf

    Boa noite! Estou com uma dúvida no meu segundo `fscanf` da parte dos PACIENTES, porque queria guardar a data que aparece no ficheiro de texto (o dia em a->h.d_dia, o mes em a->h.d_mes e o ano em a->h.d_ano), mas está-me a aparecer números aleatórios na consola. Alguém sabe como me ajudar? P.S: Na parte dos médicos também era suposto aparecer alguma coisa, mas não consigo achar o erro. Se alguém souber, também agradeço. struct hora_entrada{int horas, minutos;}; struct hora_saida{int horas, minutos;}; typedef struct medico med, *p_med; struct medico{ char nome[ST_TAM]; char especialidade[ST_TAM]; struct hora_entrada h_e; struct hora_saida h_s; p_med prox; }; struct data_nasc{int dia, mes, ano;}; struct historico{ char grau[ST_TAM]; int d_dia; int d_mes; int d_ano; char nome[ST_TAM]; }; typedef struct paciente pac, *p_pac; struct paciente{ char nome[ST_TAM]; struct data_nasc d_n; int consultas; struct historico h; p_pac prox; }; int le_dados (){ FILE *f, *g; med *v; pac *a; int i; f=fopen("medico.txt", "rt"); g=fopen("paciente.txt", "rt"); if (f==NULL || g==NULL){ printf("Erro no acesso ao ficheiro.\n"); return 0; } v=malloc(sizeof(med)); a=malloc(sizeof(pac)); if (v==NULL || a==NULL){ printf("Erro na alocaçao de memoria.\n"); return 0; } printf("\nMEDICOS\n"); while (fscanf(f,"%49[^\n] %49s %d:%d-%d:%d",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos )==6 ) printf("%s %s %d %d %d %d\n",v->nome, v->especialidade, &v->h_e.horas, &v->h_e.minutos, &v->h_s.horas, &v->h_s.minutos); printf("\n\nPACIENTES\n"); while (fscanf(g,"%49[^\n] %d-%d-%d %d",a->nome, &a->d_n.dia, &a->d_n.mes, &a->d_n.ano, &a->consultas)==5) printf("Nome: %s\nData de nascimento: %d-%d-%d\nConsultas: %d\n",a->nome, a->d_n.dia, a->d_n.mes, a->d_n.ano, a->consultas); for(i=0;i<a->consultas;i++){ fscanf(g,"%s %d %d %d",a->h.grau, &a->h.d_dia, &a->h.d_mes, &a->h.d_ano); printf("\t%s %d/%d/%d",a->h.grau, a->h.d_dia, a->h.d_mes, a->h.d_ano); } fclose(f); }
  12. Olá! Vim pedir ajuda relativamente um jogo da forca, o enunciado deste exercício pede que tenha um ficheiro disponível com diversas palavras que o jogador possa adicionar, alterar e visualizar a partir desse ficheiro e outra parte evidentemente que é para jogar, mas visto que não estou a entender como poderei fazer a parte do sorteio da palavra o jogo não corre na execução. Aqui fica a minha tentativa resolução. Provavelmente o código terá outros erros... Ainda estou em fase de experimentação . void jogar(char ficheiro[]){ FILE *f; jogador_t temp; char letra[5],jogador[500]; char pal [60]; int qtd=0; int tentativas=5,pontos=0,vidas=0,confirmacao,palavrascertas=0,sessao=0,j; f=fopen(ficheiro,"r"); if (f==NULL){ printf("Erro ao abrir o ficheiro. Tente novamente!\n\n"); } printf("\n Insira o nome do jogador: "); scanf("%s",jogador); srand(time(NULL)); while(!feof(f)) { fread(&temp,sizeof(temp),1,f); qtd++; } fclose(f); pal=rand()%1; tentativas=strlen(pal); vidas=tentativas-1; while (vidas < tentativas){ // enquanto as vidas forem inferiores ao comprimento da palavra(tentativas) --> jogo corre sessao++; printf("\n\nDe momento, esta na %iª jogada e tem %i pontos. \n Tem %i palavras certas.",sessao,pontos,palavrascertas); //inf. para o jogador printf("\nInsira uma letra: "); scanf("%s",letra); for(j=0;j<tentativas;j++){ confirmacao=0; if (letra[0]==pal[tentativas]){ // se a letra for igual alguam das letras das palvras pontos++; //adiona uma ponto confirmacao++; // adiciona se for igual a letra algumas das letras fda palavra em jogo caso contrário fica com 0 } } if (confirmacao==0){ //caso não tenha sido confirmado,logo a letra não seja igual -> jogador perde vidas--; //retira uma vida ao jogador if (vidas==0){ //caso as vidas sejam 0 == 0 , termina o jogo printf("GAME OVER! \n A palavra seria %s.\n",pal); // jogador é derrotado } else{ printf("A letra esta errada! Ainda tens %i vidas.\n"); // jogador falaha tentativa } } else { if (pontos==tentativas){ //caso os pontos que sido iguais às tentativas (por cada letra da palavra em jogo) --> jogador vence printf("PARABENS! A palavra e: %s .",pal); palavrascertas++; //conta palavra acertada jogarnov(jogador,palavrascertas,sessao,pontos); // mensagem de fim do jogo }else{ printf("A letra esta correta."); // letra está corrta e prosegue --> jogador certou letra } } } }
  13. _covinhas_

    Jogo da "Forca"

    #include <stdio.h> #include<stdlib.h> #include<string.h> #include<time.h> #include <ctype.h> #define N 500 #define PAL 100 typedef struct jogador_s { char palavra[300]; struct jogador_s *seg; }jogador_t; jogador_t *insere_lista(jogador_t contem,jogador_t *p){ jogador_t *aux,*aux1; // 2 ponteiros auxiliares aux=p; //por inicio ou à cabeça if(p==NULL){ // Se não existir nada na lista, insere dados p=(jogador_t*) malloc(sizeof(jogador_t)); // aloca na memória *p=contem; //aquilo que estiver no ponteiro armaneza p->seg=NULL; // aponta para NULL return p; } while (aux->seg!=NULL) { // se não tiver vazia, procura por "espaço" vazio aux=aux->seg; } //faz a função anterior aux1=(jogador_t *)malloc(sizeof(jogador_t)); // aloca na memória *aux1=contem; aux->seg=aux1; aux1->seg=NULL; return p; } jogador_t *pede_dados(jogador_t *p){ jogador_t novo; printf("Inserir palavra: "); scanf("%s",novo.palavra); // pede os dados e irá à funçao da insere_lista p=insere_lista(novo,p); printf("Foi adicionado com sucesso!\n\n"); } jogador_t *alterar(jogador_t *p){ jogador_t novo,velho; jogador_t*aux; // PONTEIRO AUXULIAR int cont=0; aux=p; do{ cont=0; p=aux; printf("Introduza a palavra que pretende alterar:"); scanf("%s",novo.palavra); // se a lista não tiver vazia irá verificar se existe algum número na lista while(p!=NULL){ if (strcmp(p->palavra,velho.palavra)){ // verifica se exista cont++; // caso exista -> contabiliza } p=p->seg; //aponta para próximo } if(cont==0){ printf("Palavra não existe!\n" ); // caso não exista, diz que não existe o nº inventário } } while( cont!=1); p=aux; printf("Insira a palavra nova: "); scanf("%s",novo.palavra); // pede os novos dados while(p!=NULL){ // se a lista não tiver vazia, copia os dados novos ou substitui os anteriores if(strcmp(p->palavra,novo.palavra)){ strcpy(p->palavra,novo.palavra); // copia a palavra nova } p=p->seg; // ponta para o próximo } p=aux; printf("Alterado com sucesso!\n"); return p; } jogador_t mostra(jogador_t *p){ if (p==NULL){ printf("Lista está vazia!\n"); exit(-1);// como ponteiro de p == NULL , logo a lista está vazia } do{ printf("\n %s \n",p->palavra); p=p->seg; // mostra até sempre encontrar um elemento, caso contrário p == NULL pará de mostrar } while(p!=NULL); } jogador_t *le_ficheiro(jogador_t *p,char ficheiro[]){ jogador_t existe; FILE *f; f=fopen(ficheiro,"r+b"); if(f==NULL){ printf("Erro ao abrir o ficheiro,tente novamente!\n\n"); } while(fread(&existe,1,sizeof(jogador_t),f)>0){ p=insere_lista(existe,p); } return p; fclose(f); } jogador_t guardar(jogador_t *p,char ficheiro[]){ FILE *f; f=fopen(ficheiro,"w+b"); if(f==NULL){ printf("Erro ao abrir o ficheiro,tente novamente!\n\n"); } while(p!=NULL){ fwrite(p,1,sizeof(jogador_t),f); p=p->seg; // se for diferente de NULL, passa para o seguinte vai sempre guardando ou escrevendo no documento } fclose(f); } void jogar(char ficheiro[]){ FILE *f; char letra[5],jogador[500],selecionada[800], palavras[PAL][50],espaco[20],c,letra1 = '\n'; int tentativas,pontos=0,vidas=7,confirmacao=0,palavrascertas=0,sessao=0,j=0,nome=0; int gera; int pal=0; srand(time(NULL)); f=fopen(ficheiro,"r+b"); if (f==NULL){ printf("Erro ao abrir o ficheiro! \n"); } while(fread (&c, sizeof(char), 1, f)) { if(c == letra1) { pal++; } } gera=rand()%10; //gere uma palvra strcpy(selecionada,palavras[gera]); // printf("A palavra seleciona e %s\n",selecionada); if (nome==0){ printf("\n Insira o nome do jogador: "); scanf("%s",jogador); //pede o nome nome++; //incrementa um vez ,pois assim sempre que reinciar o jogo não pergunta o nome novamente } tentativas = strlen(selecionada); // tamanho da palavra selcionada while (vidas > 0){ // enquanto as vidas forem inferiores ao comprimento da palavra(tentativas) --> jogo corre sessao++; printf("\n\nDe momento, esta na %iª jogada e tem %i pontos. \n Tem %i palavras certas.",sessao,pontos,palavrascertas); //inf. para o jogador for(j=0;j<strlen(selecionada);j++){ espaco[j]='_'; // conta os espaco da palvra selcionada } printf("\n %s ",espaco); // coloca o espaço da palvr a a ser adivinha printf("\nInsira uma letra: "); scanf("%s",letra); for(j=0;j<tentativas;j++){ if (letra[0]==selecionada[tentativas]){ // se a letra for igual alguam das letras das palvras espaco[j]=selecionada[j]; pontos++; //adiciona uma ponto confirmacao++; // adiciona se for igual a letra algumas das letras fda palavra em jogo caso contrário fica com 0 } } if (confirmacao==0){ //caso não tenha sido confirmado,logo a letra não seja igual -> jogador perde vidas--; //retira uma vida ao jogador if (vidas==0){ //caso as vidas sejam 0 == 0 , termina o jogo printf("GAME OVER! \n A palavra seria %s.\n",selecionada); // jogador é derrotado } else{ printf("A letra esta errada! Ainda tens %i vidas.\n"); // jogador falha uma tentativa } } else { if (pontos==tentativas){ //caso os pontos que sido iguais às tentativas (por cada letra da palavra em jogo) --> jogador vence printf("PARABENS! A palavra e: %s .",selecionada); palavrascertas++; //conta palavra acertada //jogarnov(jogador,palavrascertas,sessao,pontos); // mensagem de fim do jogo }else{ printf("A letra esta correta."); // letra está corrta e prosegue --> jogador certou letra } } } fclose(f); } void jogarnov(char jogador[600],int palavrascertas,int sessao,int pontos) { int sessao1=1,op; char ficheiro[] = "filmes.dat"; printf("\n\n\nTERMINOU O SEU JOGO!\n Deseja jogar novamente? Sim [1] ou Nao [2].\n"); scanf("%i",&op); if (op==1){ //caso o jogador queira jogar novamente printf("---------------------------------------\n"); printf("||| JOGADOR * %s |||\n",jogador); printf("||| PONTUACAO * %i |||\n",pontos); printf("||| PALVRAS CERTAS * %i |||\n",palavrascertas); printf("||| JOGADAS * %i |||\n",sessao); printf("||| SESSAO * %i |||\n",sessao1); printf("---------------------------------------\n"); jogar(ficheiro); } sessao1++; if(op==2) { // termina o jogo e encerra o programa printf("---------------------------------------\n"); printf("||| JOGADOR * %s |||\n",jogador); printf("||| PONTUACAO * %i |||\n",pontos); printf("||| PALVRAS CERTAS * %i |||\n",palavrascertas); printf("||| JOGADAS * %i |||\n",sessao); printf("||| SESSAO * %i |||\n",sessao1); printf("---------------------------------------\n\n"); exit(-1); } } int main (){ char ficheiro[] = "filmes.dat"; jogador_t *p = NULL; int op,op1; do{ p=le_ficheiro(p,ficheiro); printf(" ================================== \n"); printf(" || Menu do Jogo da Forca || \n"); printf(" ----------------------------------\n"); printf(" || 1. Dicionario || \n"); printf(" || 2.Jogar || \n"); printf(" ================================== \n"); printf("Escolha a sua opcao:"); scanf("%i",&op); if (op==1){ do{ p=le_ficheiro(p,ficheiro); printf(" \n\n*** DICIONARIO *** \n"); printf("1. Ver palavras. \n"); printf("2. Adicionar palavras.\n"); printf("3. Alterar palavras.\n"); printf("4. Sair. \n"); printf("Escolha a sua opcao:"); scanf("%i",&op1); switch(op1){ case 1: mostra(p); break; case 2: p=pede_dados(p); guardar(p,ficheiro); break; case 3: p=alterar(p); guardar(p,ficheiro); break; case 4: return 0; break; } }while (op1!=4); } if (op==2){ printf("Bem-vindo ao Jogo da Forca! \n"); jogar(ficheiro); } }while (op!=3); } Olá! Vim pedir ajuda relativamente um jogo da forca, o enunciado deste exercício pede que tenha um ficheiro disponível com diversas palavras que o jogador possa adicionar, alterar e visualizar a partir desse ficheiro e outra parte evidentemente que é para jogar, mas visto que não estou a entender como poderei fazer a parte do sorteio da palavra o jogo não corre na execução. Aqui fica a minha tentativa resolução. Provavelmente o código terá outros erros... Ainda estou em fase de experimentação .
  14. Ola Muito Boa Noite eu tenho que fazer um projeto em pascal e no projeto diz que devo calcular e apresentar a média das idades no conjunto das pessoas no mesmo ficheiro e eu não sei como fazer,Podem me ajudar?Agradecia Muito!Obrigada O código ta Assim: program registo_de_pessoas; uses crt; type registo=record nome:String; idade:integer; end; type data=record dia,mes,ano:integer; end; var fich1:file of registo; pessoa:registo; data_nas:data; n,c:Integer; function existeFicheiro:Boolean; Begin assign(fich1,'RegistoPessoas.dat'); {$I-} reset(fich1);Close(fich1); {$I+} existeFicheiro:=(IoResult=0); end; procedure registo_de_pessoas; Begin clrscr; writeln('Registar Pessoas'); if existeFicheiro then reset(fich1) else rewrite(fich1); write('Quantos Registo vai Introduzir?'); readln(n); for c:=1 to n do Begin write('Nome:'); readln(pessoa.nome); write('Idade'); readln(pessoa.idade); writeln('Data de Nascimento'); write('Dia:'); readln(data_nas.dia); write('Mes:'); readln(data_nas.mes); write('Ano:'); readln(data_nas.ano); seek(fich1,Filesize(fich1)); write(fich1,pessoa); end; close(fich1); end; Begin Writeln('Bem Vindo ao Registos de Pessoas'); registo_de_pessoas; readln; end.
  15. Olá, Estou a construir um programa no VB.Net que tem como objetivo criar um ficheiro de texto chamado "Agenda.txt". Este programa inclui várias opções/botões na interface gráfica como: INSERIR (isto é, inserir o nome e o telefone da pessoa), LISTAR (após gravar os dados no ficheiro, esta opção mostra esses dados numa DataGrid), APAGAR, PROCURAR (procurar o nome no ficheiro através de uma sugestão de um nome pelo utilizador), e por fim GRAVAR E SAIR. Ora, o problema é que na opção PROCURAR, eu quero exibir uma mensagem no ecrã a dizer "O nome introduzido não foi encontrado na lista" quando o utilizador tenta procurar por um nome que deseja e esse nome não se encontra na lista. Quando eu procuro por um nome não existente na lista, essa mensagem aparece-me muitas vezes - o nº de vezes que me aparece é exatamente o mesmo nº de linhas que o ficheiro tem (essas linhas contêm cada nome que já foi inserido + uma linha em branco), ou seja a mensagem vai aparecendo enquanto não encontrar o nome na lista. Eu tive sucesso em fazer o inverso - procurar um nome que esteja na lista, e felizmente a MessageBox aparece-me apenas uma vez (quando efetivamente encontra o nome na agenda). O código é: Dim i As Integer Dim nome As String nome = InputBox("Qual o nome a procurar") For i = 0 To Form3.DataGridView1.RowCount - 1 If nome = Form3.DataGridView1.Rows(i).Cells(0).Value Then Form3.DataGridView1.Rows(i).Selected = True MessageBox.Show("O nome introduzido foi encontrado na lista.") End If Next Se alguém pudesse me dar uma dica como é que eu devia incluir a messagem de "O nome não foi encontrado" apenas uma vez, seria ótimo!
  16. David Fernandes

    Eliminar texto de um ficheiro (dúvida)

    Boa tarde. Encontro-me a realizar um trabalho para a faculdade em que consiste no desenvolvimento de um sistema de controlo de um supermercado. A linguagem utilizada é C. Acontece que uma (das várias) funcionalidades pretendidas com este trabalho, é a remoção de um produto x de um ficheiro. E após compilar e executar o programa obtenho o seguinte erro: "Falha de segmentação". Muito obrigado a quem poder ajudar. DF void del_prod(produto prod[], int a) { //função para eliminar um produto FILE *fx; FILE *ft; fx=fopen(FX,"r"); ft=fopen(FT,"w"); int i, comp; char temp[50], x[50], s[50]; printf("Indique o código do produto que quer eliminar: \n"); scanf("%s", s); while((fgets(temp, 51, fx))!=NULL) { for(i=0; temp[i]!=";"; i++) { x[i]=temp[i]; } comp=strcmp(x,s); if(comp!=0) { fputs(temp, ft); } x[0] = '\0'; } fclose(fx); fclose(ft); remove("supermercado.txt"); rename("temporario.txt", "supermercado.txt"); }
  17. Marco Verdial

    fgets para estrutura (dados no ficheiro)

    Boa tarde a todos, estou aqui com uma dúvida e se alguém me pudesse ajudar agradecia No meu problema eu tenho um ficheiro (simples) em que tenho lá algo como: 7987 Luís Miguel 9879 João Freitas Numa linha tenho o nr do aluno, seguidamente tenho o nr do aluno. (são só umas 10 linhas) Eu estou a tentar preencher um vetor de structs com esses dados (para cada aluno). Eu crio o apontador *aluno que é do tipo alunos (a tal estrutura). Este código é em linux que está a ser trabalhado então dai os argv e argc. Basicamente temos de executar o programa na consola e dar logo os "dados". Por exemplo: ./turma 13 alunos.txt o 13 é o nr de linhas que eu vou ler do ficheiro e o alunos.txt é o ficheiro onde estão os dados. A minha dúvida é no fgest. Eu inicialmente tinha usado fscanf só que estava-me a dar problemas porque estava a ignorar o espaço entre o nome. Por exemplo, em vez de ficar guardado o nome Luís Miguel ficava só Luís... O código como está não funciona bem, alguém me pode ajudar pf? Peço desculpa se não expliquei bem, mas qualquer questão digam ai que eu tento explicar #include <stdio.h> #include <stdlib.h> #include <string.h> #include "funcoes.h" int main (int argc, char *argv[]) { FILE *fp; int i,size; alunos *aluno; // (anteriormente) Vetor criado conforme o tamanho que o utilizador quer size=atoi(argv[1]); aluno=(alunos*)calloc(size, sizeof(alunos)); fp=fopen(argv[2],"r"); for (i=0;i<size;i++) { fscanf(fp,"%d", &(aluno[i].numero)); fgets(aluno[i].nome,sizeof aluno[i].nome,fp); } imprimir(aluno,size); // dar print do vetor fclose(fp); // fechar o ficheiro que abri para leitura }
  18. CláudiaMagalhães

    Matrizes Vetores e Ficheiros em Java

    Boa tarde Pessoal, Será que me sabem indicar algum local onde tenha trabalhos feitos com matrizes e ficheiros em java? Exemplo de um output com ficheiro e matrizes: Classificações de Frequência Número Nome Nota de Frequência Resultado 1999999 Ana Gomes Silva 18.0 Admitido a Exame 1999888 Manuel Castro 7.0 SM Obrigada.
  19. Como posso mover o ponteiro do arquivo em Pascal??
  20. johnny244

    Ficheiro binário

    Boa tarde, sei que ja existe bastantes topicos sobre o assunto, mas nao consegui esclarecer a minha duvida na mesma. Deixo abaixo o código do respectivo programa. #include <stdio.h> #include <stdlib.h> #define LIM 31 #define TAMUC 60 #define MAXNOME 30 typedef struct { int numAluno; char nome[MAXNOME]; int notafinal; } T_ALUNO; FILE *f; //Prototipo das funçoes int MenuOpcoes(void); T_ALUNO ler_dados_estudante(void); void mostra_Dados_Alunos(T_ALUNO aluno); void mostrar_dados_estudantes(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); int Alterar_nota_Aluno(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); void mostrar_estatisticas(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); void gravar_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); int AbrirFich(int numAlunosInseridos); void Mostrar(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); int ler_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos); void main(void) { T_ALUNO vetorAlunos[TAMUC]; int numAlunosInseridos = 0, opcao, numAlunoAmostrar, i; do { opcao = MenuOpcoes(); switch(opcao) { case 1: vetorAlunos[numAlunosInseridos] = ler_dados_estudante(); numAlunosInseridos++; system("cls"); break; case 2: mostrar_dados_estudantes(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 3: numAlunosInseridos = Alterar_nota_Aluno(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 4: mostrar_estatisticas(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 5: gravar_ficheiro(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; case 6: ler_ficheiro(vetorAlunos, numAlunosInseridos); system("pause"); system("cls"); break; } } while(opcao != 0); return 0; } T_ALUNO ler_dados_estudante(void) { T_ALUNO novoAluno; printf("Num. aluno: "); scanf(" %d", &novoAluno.numAluno); printf("Nome: "); scanf(" %[^\n]s", novoAluno.nome); do { printf("Nota Final: "); scanf("%d", &novoAluno.notafinal); if (novoAluno.notafinal < -1 || novoAluno.notafinal > 20) printf("\n\nNota invalida.\n"); } while (novoAluno.notafinal < -1 || novoAluno.notafinal > 20); return novoAluno; } void mostrar_dados_estudantes(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int i; for(i=0; i<numAlunosInseridos; i++) { mostra_Dados_Alunos(vetorAlunos[i]); } } void mostra_Dados_Alunos(T_ALUNO aluno) { printf("Numero Aluno: %d \n Nome do Aluno: %s \n Nota Final: %d \n\n", aluno.numAluno, aluno.nome, aluno.notafinal); } int Alterar_nota_Aluno(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int numAlunoAlterar, i, j; printf("Num Aluno: "); scanf("%d", &numAlunoAlterar); for(i=0; i<numAlunosInseridos; i++) { if(vetorAlunos[i].numAluno == numAlunoAlterar) { do { printf("Nota Final: "); scanf("%d", &vetorAlunos[i].notafinal); if (vetorAlunos[i].notafinal < -1 || vetorAlunos[i].notafinal > 20) printf("\n\nNota invalida.\n"); } while (vetorAlunos[i].notafinal < -1 || vetorAlunos[i].notafinal > 20); return numAlunosInseridos; } } } void mostrar_estatisticas(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int i, somaNotas = 0, maior = -1, menor = 21, cont=0; float media,percentagem = 0; for(i=0; i< numAlunosInseridos; i++) { somaNotas += vetorAlunos[i].notafinal; } //Media media = (float)somaNotas/numAlunosInseridos; printf("\nA media das Notas: %.2f \n", media); //Nota mais alta for (i = 0; i < numAlunosInseridos; i++) if (vetorAlunos[i].notafinal > maior) { maior = vetorAlunos[i].notafinal; } printf("\n A nota mais alta e: %d \n", maior); //Nota mais baixa for (i = 0; i < numAlunosInseridos; i++) if (vetorAlunos[i].notafinal < menor) menor = vetorAlunos[i].notafinal; printf("\n A nota mais Baixa e: %d \n", menor); for(i=0; i< numAlunosInseridos; i++) if (vetorAlunos[i].notafinal >= 10) cont = cont+1; percentagem = ((float)cont/numAlunosInseridos)*100; printf("\nA percentagem de notas positivas e: %.0f %% \n", percentagem); } void gravar_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { FILE *f; int i; f=fopen("aluno.dat", "wb"); if(f==NULL) { printf("Ocorreu um erro!"); } else { for(i=0; i< numAlunosInseridos; i++) { fwrite(&vetorAlunos, sizeof(T_ALUNO), 1, f); } } fclose(f); } int AbrirFich(int numAlunosInseridos) { if ((f=fopen("aluno.dat","rb"))==NULL) return 0; fseek(f,0,SEEK_END); numAlunosInseridos = ftell(f)/sizeof(T_ALUNO); printf("\nExistem %d registos\n",numAlunosInseridos); return -1; } void Mostrar(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { int i; rewind(f); for(i=0; i< numAlunosInseridos; i++) { fread(&vetorAlunos, sizeof(T_ALUNO), 1, f); printf("\nNumero : %d \n ", vetorAlunos[i].numAluno); printf("\nNome : %s\n", vetorAlunos[i].nome); printf("\nNota Final : %d\n", vetorAlunos[i].notafinal); } printf("\n"); } int ler_ficheiro(T_ALUNO vetorAlunos[TAMUC], int numAlunosInseridos) { char op; if (AbrirFich(numAlunosInseridos)==0) { printf("Ficheiro não existe\n"); exit(1); } do { printf("m=Mostrar s=Sair\n"); scanf(" %c", &op); switch (op) { case 'm': Mostrar(vetorAlunos, numAlunosInseridos); break; case 's': break; default: printf("opção inválida!"); } } while (op != 's'); fclose(f); } int MenuOpcoes(void) { int opcao; do { printf("1 - Inserir dados dos estudantes \n"); printf("2 - Mostrar dados dos estudantes\n"); printf("3 - Alterar notas finais dos estudantes \n"); printf("4 - Estatisticas das avaliacoes\n"); printf("5 - Gravar dados em ficheiro\n"); printf("6 - Ler dados de ficheiro \n"); printf("0 - Sair"); printf("\nOpcao: "); scanf("%d", &opcao); if(opcao < 0 || opcao > 6) { printf("Opcao inválida!"); } } while(opcao < 0 || opcao > 6); return opcao; } Neste caso a minha duvida é a seguinte, quando executo o programa e insiro alunos e logo a seguir gravar e ler posteriormente o ficheiro, o programa lê sem problemas o ficheiro. Mas quando executo o programa e escolho logo a opção para ler o ficheiro, ele não lê dados do ficheiros. Obrigado a quem se disponibilizar a ajudar.
  21. a3deluxe

    Copiar ficheiros txt

    Boa tarde, O meu programa tem um Botão para copiar o conteúdo de um ficheiro txt (file2.txt) para um segundo ficheiro txt(file1.txt) quando copia do file2.txt para o file1.txt. O file1 já esta vazio, sem contudo, porque foi apagado por outro processo. // Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim a = My.Computer.FileSystem.ReadAllText("C:\file2.txt") My.Computer.FileSystem.WriteAllText("C:\file1.txt", a, False) End Sub Precisava de uma ajuda como posso fazer em género de um "ciclo". sempre que carrego no botão copiar do file2 para o file1 e depois do file1 para o file2. O PROBLEMA é que quando o ficheiro é copiado o primeiro esta vazio neste caso o file fica vazio. Tinha pensado em colocar um 3 ficheiro, a copia de algum dos outros. Como acham que posso fazer? Obrigado
  22. a3deluxe

    Leitura Ficheiro INI

    Boa noite, precisava de uma ajudinha no seguinte: O código seguinte faz a leitura de um ficheiro INI // Dim objIniFile As New IniFile("c:\Ficheiro.ini") Dim ler = objIniFile.GetString("Numeros", "Valor", 0) ler = ler + +"1" objIniFile.WriteDouble("Numeros", "Valor", ler) -------------Ficheiro,ini ------------------- [Numeros] Valor=0 ------------------------------------------------- Agora queria o Seguinte: Colocar um Timer, a verificar, sempre que o valor for = 500 (Valor=500) então enviar MsgBox a avisar. A minha dúvida é como coloco um IF nesse código. Obrigado
  23. kinhas

    Manipular ficheiros de texto

    Boas.. Tenho 1 arquivo txt e preciso passar as primeiras 20 linhas desse ficheiro para um novo txt, em seguida acrescentar um cabeçalho e acrescentar as seguintes 20 linhas, em seguida mais um cabeçalho ... Sempre neste formato até acabar as linhas do ficheiro txt original.. Alguém me pode dar uma ajuda?
  24. BHAMF

    [Resolvido] Pastas Pascal

    Queria saber como faço para criar pastas em Pascal, alguém aí sabe algo sobre? Estou à espera de respostas. Obrigado desde já
  25. PsySc0rpi0n

    Erros em função

    Boas... Por incrível que pareça nem isto estou a conseguir fazer. Uma coisa tão simples como escrever uma estrutura de dados preenchida num ficheiro, ler de novo a estrutura do ficheiro e apresentar o conteúdo na consola... #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #define BUFFER 15 typedef struct dadosMoeda{ int NiM; char Metal[bUFFER]; float Valor; int Stock; }imoeda; //Abrir stream para um ficheiro FILE* fileOpen(FILE* fp, char* fileName){ if((fp = fopen(fileName, "a+")) == NULL){ printf("Erro ao abrir ficheiro!\n"); exit(-1); } return fp; } void mostraMenu(void){ printf("Menu Principal\n"); printf("\tInserir Moeda\n"); printf("\tAtualizar Stock\n"); printf("\tSair\n"); } int main(int argc, char** argv){ imoeda tmpbasedados = {0}, tmpbasedadosf = {0}; FILE* fpointer = NULL; fpointer = fileOpen(fpointer, "moedas.dat"); tmpbasedados.NiM = 100; strcpy(tmpbasedados.Metal, "Ouro"); tmpbasedados.Valor = 300; tmpbasedados.Stock = 50; fwrite(&tmpbasedados, sizeof(imoeda), 1, fpointer); fseek(fpointer, 0, SEEK_SET); fread(&tmpbasedadosf, sizeof(imoeda), 1, fpointer); MostraMoeda(tmpbasedadosf); fclose(fpointer); return 0; } Estava-me a esquecer do fseek... Para já parece estar resolvido!
×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.