Ir ao conteúdo
  • Cadastre-se

Vinicius schmitz

Membro Júnior
  • Posts

    4
  • Cadastrado em

  • Última visita

Tudo que Vinicius schmitz postou

  1. @arfneto Muito obrigado mesmo, td explicado de forma didática, e você refez o código ainda. De verdade, me ajudou muito!!!!
  2. @herbertbahia @herbertbahia @arfneto Sim, sei poucas diferenças entre c e c++, daí vou fznd meio q misturado kk. Mudei bem pouca coisa no código, só para corrigir aquilo, que não estava substituindo corretamente o 2° conjunto de dados, segue o código: #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; void criar_arq2(char nome_arq[]) { FILE *parq = fopen(nome_arq,"wb"); char nome[20]; int idade; float altura; if (parq == NULL) printf("Erro ao abrir arquivo!!!\n\n"); else { int r = 1; do { printf("\nDigite nome, idade e altura: "); scanf("%s %i %f",nome, &idade, &altura); fwrite(&nome,sizeof(nome),1,parq); fwrite(&idade,sizeof(idade),1,parq); fwrite(&altura,sizeof(altura),1,parq); printf("\nDigite zero para parar: "); scanf("%i", &r); } while(r); fclose(parq); } } void ler_arq_2(char nome_arq[]) { FILE *parq = fopen(nome_arq,"rb"); char nome[20]; int idade; float altura; if (parq == NULL) printf("Erro ao abrir arquivo!!!\n\n"); else { while (fread(&nome,sizeof(nome),1,parq)) { fread(&idade,sizeof(idade),1,parq); fread(&altura,sizeof(altura),1,parq); printf("nome : %s\n",nome); printf("idade : %d\n",idade); printf("altura: %.2f\n",altura); } fclose(parq); } } void substituir_arq2(char nome_arq[]) { FILE *parq = fopen(nome_arq,"r+b"); char nome2[20] = "Maria"; int idade2 = 15; float alt2 = 1.55; fseek(parq,28,SEEK_SET); //Aqui o fseek pula para onde seria na teoria a 4° linha do arquivo, onde começa o 2° conjunto de dados, assim para substitui-lo por Maria 15 1.55 fwrite(&nome2,sizeof(nome2),1,parq); fwrite(&idade2,sizeof(idade2),1,parq); fwrite(&alt2,sizeof(alt2),1,parq); fclose(parq); } int main() { cout << "Exercício criar o arquivo:\n\n\n" << endl; cout<<"Digite o nome do arquivo:\n\n"; char arq[20]; cin>>arq; criar_arq2(arq); ler_arq_2(arq); substituir_arq2(arq); cout<<"\n\n\n"; ler_arq_2(arq); return 0; }
  3. @arfneto @arfneto Oi, então o rewind foi inútil mesmo, eu coloquei só pra fzr uns testes, e esqueci de deletar. Arrumei o código, coloquei o ler_arquivo() no main(), porque se eu só deixasse na função substituir ele lia o arquivo original certo? porque o resultado na tela saia o mesmo de antes. No caso de espaçar a impressão dos registros acabei não o fazendo mas sim, seria melhor, e realmente não sei como colocar um prompt de comando como disse. Era esse o problema provavelmente, mudei isso e agora deu certo como eu queria. E do append mode foi a mesmo coisa do rewind(), eu tava tentando solucionar na louca, e mudei pra "a+b" no modo de abertura hehe. Muito Obrigado pela ajuda!! adicionado 2 minutos depois @devair1010 Sim, vendo uns vídeos pra tentar solucionar o problema percebi isso, mas esse exercício era só pra substituir o segundo conjunto de dados por outro, então nem fiz usando struct. Obrigado pela dica!!
  4. Olá pessoal, estou com uma dúvida em um código em c++ que consiste em substituir o 2° conjunto de dados de um arquivo binário, a estrutura dele deve ser assim, exemplo: vinicius 20 1.80 Luan 17 1.65 Sendo uma string para o nome, um tipo inteiro para a idade, e um tipo float pra. Eu quero substituir o segundo conjunto ali (luan 17 1.65) por esse pré estabelecido (Maria 15 1.55) mas não consigo fazer isso, quando uso o fwrite para escrever por cima no arquivo n dá em nada. Isso deve ser feito na função substituir. Segue o Código: #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> using namespace std; void criar_arq2(char nome_arq[]) { FILE *parq = fopen(nome_arq,"wb"); char nome[20]; int idade; float altura; if (parq == NULL) printf("Erro ao abrir arquivo!!!\n\n"); else { int r = 1; do { printf("\nDigite nome, idade e altura: "); scanf("%s %i %f",nome, &idade, &altura); fwrite(&nome,sizeof(nome),1,parq); fwrite(&idade,sizeof(idade),1,parq); fwrite(&altura,sizeof(altura),1,parq); printf("\nDigite zero para parar: "); scanf("%i", &r); } while(r); fclose(parq); } } void ler_arq_2(char nome_arq[]) { FILE *parq = fopen(nome_arq,"rb"); rewind(parq); char nome[20]; int idade; float altura; if (parq == NULL) printf("Erro ao abrir arquivo!!!\n\n"); else { while (fread(&nome,sizeof(nome),1,parq)) { fread(&idade,sizeof(idade),1,parq); fread(&altura,sizeof(altura),1,parq); printf("nome : %s\n",nome); printf("idade : %d\n",idade); printf("altura: %.2f\n",altura); } fclose(parq); } } //27 void substituir_arq2(char nome_arq[]) { FILE *parq = fopen(nome_arq,"a+b"); char nome2[10] = "Maria"; int idade2 = 15; float alt2 = 1.55; fseek(parq,18,SEEK_SET); int aux=ftell(parq); fwrite(&nome2,sizeof(nome2),1,parq); fwrite(&idade2,sizeof(idade2),1,parq); fwrite(&alt2,sizeof(alt2),1,parq); ler_arq_2(nome_arq); fclose(parq); } int main() { cout << "Exercício criar o arquivo:\n\n\n" << endl; cout<<"Digite o nome do arquivo:\n\n"; char arq[20]; cin>>arq; criar_arq2(arq); ler_arq_2(arq); substituir_arq2(arq); return 0; } main.cpp.txt

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...