Ir ao conteúdo
  • Cadastre-se
Alasca

RESOLVIDO Manipular arquivos em c

Recommended Posts

Estou com tendo alguns erros ao escrever um programa para corrigir o texto gravado em texto.txt. A correção deveria inserir uma vírgula após a palavra Bentinho e uma interrogação no fim da frase. Para isso, é preciso ler o arquivo de entrada texto.txt e fazer as correções, então gravar a nova frase em um novo arquivo chamado textocerto.txt.

 

Esse é o conteúdo de texto.txt.


 

Mas, Bentinho que e protonotario apostolico

 

Esse é o código:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Le_texto(char v[500])
{
   FILE *fp;
   if ((fp=fopen("texto.txt","r"))==NULL)
   {
      printf("Não foi possivel abrir arquivo!");
      exit(1);
   }
   fgets(v,500, fp);
   printf("%s", v);
   fclose(fp);
   return 0;
}
void Corrigir (char v)
{
    char s1[] = "Mas, Bentinho";
    char s2[] = ",";
    char s3[] = " que e protonotario apostolico";
    char s4[] = "?";
    char v[];
    strcat(s1, s2);
    strcpy(v, s1);
    puts(v);
    strcat(s3, s4);
    strcpy(v, s3);
    puts(v);
}
void Grava_texto(char v[500])
{
 FILE *fp2;
   if ((fp2=fopen("textocerto.txt","w"))==NULL)
   {
      printf("Não foi possivel abrir arquivo!");
      exit(1);
   }
   fgets(v,500, fp2);
   printf("%s", v);
   fclose(fp2);
   return 0;

}
int main()
{
    char vetor[500];
    Le_texto(vetor);
    return 0;
}


 

 

Se alguém puder ajudar agradeço muito!

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Os parâmetros de todas as funções tem o mesmo nome. Tira esse "v" e coloca nomes diferentes para os parâmetros. Isso evita conflitos na hora da implementação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você ta usando fgets na hora de gravar o texto, o certo é fprintf (até hj só usei o fprintf, mas tem outros metodos também).

Fora que falta fazer a chamada das funções corrigir e gravar, voce só esta lendo o texto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hello friend.

//P.S: Comentar o código vai facilitar sua vida

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int Le_texto(char *v)
{
   FILE *fp;
   if ((fp=fopen("texto.txt","r"))==NULL)
   {
      printf("Não foi possivel abrir arquivo!");
      exit(1);
   }
  //Corrigindo sua linha fgets
   while(fgets(v,500, fp)!= NULL){
  	 printf("%s", v);
   }
   fclose(fp);
   return 0;
}
//void Corrigir (char v)
void Corrigir()
{
    char s1[] = "Mas, Bentinho";
    char s2[] = ",";
    char s3[] = " que e protonotario apostolico";
    char s4[] = "?";
   // char v[]; DECLARAÇÃO INCORRETA, E ESTA EM DESACORDO COM O PARAMETRO DA CHAMADA DA FUNÇÃO
    char v[500];
    strcat(s1, s2);
    strcpy(v, s1);
    puts(v);
    strcat(s3, s4);
    strcpy(v, s3);
    puts(v);
}
void Grava_texto(char *v)
{
 FILE *fp2;
   if ((fp2=fopen("textocerto.txt","w"))==NULL)
   {
      printf("Não foi possivel abrir arquivo!");
      exit(1);
   }
   //As duas linhas a seguir serve apenas apra ler o conteudo do arquivo
   //fgets(v,500, fp2); 
   //printf("%s", v);
   fprintf(fp2,"%s",v);
   fclose(fp2);
   //return 0; usando void como tipo de função

}
int main()
{
    char vetor[500];//Memoria ja alocada
    Le_texto(vetor);//Envia vetor alocado acima
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz algumas modificações no código e uni as funções de corrigir e gravar o texto. Agora está funcionando tudo certo.

Obrigada pela ajuda!

 

Segue o código final:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Le_texto(char v[500])
{
    FILE *fp;
    if ((fp=fopen("texto.txt","r"))==NULL)
    {
        printf("Não foi possivel abrir arquivo!");
        exit(1);
    }
    fgets(v,500, fp);
    printf("%s", v);
    fclose(fp);
    return 0;
}
void Grava_texto()
{
    char s1[] = "Mas, Bentinho";
    char s2[] = ",";
    char s3[] = " que e protonotario apostolico";
    char s4[] = "?";
    char v[500];
    strcat(s1, s2);
    strcat(s1, s3);
    strcat(s1, s4);
    strcpy(v, s1);
    puts(v);
    FILE *fp2;
    fp2=fopen("textocerto.txt","w");
    if(fp2 == NULL)
    {
        printf("Erro na abertura do arquivo!");
        exit(1);
    }
    fprintf(fp2, "%s", v);
    fclose(fp2);
    printf("\n\nDados gravados com sucesso!");
    getch();
    exit(1);
}
int main()
{
    char v[500];
    printf("Texto original:\n");
    Le_texto(v);
    printf("\n");

    printf("Texto corrigido:\n");
    Grava_texto(v);
    return 0;
}


 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cuida nessa situação, onde você chama uma função que não esta usando argumentos na chamada:

Citação

 //Veja que usou v ao chamar a função abaixo.

void Grava_texto() {

e

Grava_texto(v);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×