Ir ao conteúdo
  • Cadastre-se

C Renomear arquivos em c


Julia_Lucia
Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

Boa noite pessoal, estou desenvolvendo um programa para o seguinte problema:

 

"Faça um programa que leia um arquivo de texto contendo um poema e exiba na tela quantos versos e quantas estrofes tem o poema, sendo cada verso uma linha com palavras e cada estrofe um bloco de versos separado do bloco anterior por uma linha em branco. O nome do arquivo deverá ser informado pelo usuário e o arquivo não deverá ser alterado.

 

Exemplo: O arquivo com o poema a seguir tem 4 versos e 2 estrofes:

Batatinha quando nasce

Espalha a rama pelo chão

 

Menininha quando dorme

Poe a mão no coração

 

Dica: Uma linha em branco não é um verso.

 

Atenção: O programa deverá obrigatoriamente manipular arquivos texto."

 

A parte de contar os versos e estrofes eu consegui fazer, mas não tem jeito de dar certo pra renomear o arquivo como o exercício pede.

 

O que desenvolvi até o momento é o seguinte:

 

#include <stdio.h>
#include <locale.h>


int main (){

    setlocale(LC_ALL, "Portuguese");

    FILE * fp;
    int versos = 0, estrofes = 0;
    char texto[100];
    fp = fopen("poema.txt", "r");
    if(fp == NULL)
    {
        printf("Erro ao abrir o arquivo!");
        return 0;
    }

    printf("Poema:\n");
    while(!feof(fp))
    {
        fgets(texto, 100, fp);
        printf("%s", texto);
        if (strlen(texto) < 99 && strlen(texto) > 1)
        {
            versos++;
        }
        else if (strlen(texto) == 1)
        {
            estrofes++;
        }
    }
    if (versos == 0)
    {
        printf("\nArquivo vazio");
    }
    else
    printf("\n\nO arquivo com o poema acima tem %d versos e %d estrofes.\n", versos, estrofes+1);

    fclose(fp);
    return 0;
}

 

Sendo que o arquivo.txt está salvo na mesma pasta que o programa e já está com o poema gravado nele.

 

Alguém pode me ajudar??? 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Julia_Lucia Onde está a parte de renomear o arquivo no enunciado? Está bem claro lá que o arquivo não pode ser alterado:

10 horas atrás, Julia_Lucia disse:

O nome do arquivo deverá ser informado pelo usuário e o arquivo não deverá ser alterado.

 

Veja o protótipo de fopen():

FILE *fopen(const char *filename, const char *mode)

O parâmetro filename é a string contendo o nome do arquivo a ser aberto, então é isso o que o programa deverá pedir ao usuário.

Você poderia fazer algo assim:

char file[101];

printf ("Digite o diretório do arquivo texto:\n");
scanf ("%100s", file);

FILE * fs = fopen (file, "r");

if (fs == NULL) {
    printf("\nNão foi possível abrir o arquivo!");
    exit(1);
}
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

@Julia_Lucia Bom, se fez as alterações que eu disse, então deveria funcionar do jeito que seu código já funcionava, e a única diferença seria que o usuário agora insere o diretório, por exemplo, poema.txt (lembre-se de colocar um .txt no final).

Mostre o código.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues Estava errando uma coisa muito boba. Quando fui digitar a ideia que você passou usei aspas simples no r e por isso não estava funcionando. Agora está tudo certo. Muito obrigada!!!

O código final ficou assim:

#include <stdio.h>
#include <locale.h>

int main (){

    setlocale(LC_ALL, "Portuguese");

    int versos = 0, estrofes = 0;
    char texto[100], nome[501];

    printf ("Digite o diretório do arquivo texto: ");
    gets(nome);

    FILE * fp = fopen (nome, "r");
    if(fp == NULL)
    {
        printf("Erro ao abrir o arquivo!");
        return 0;
    }

    printf("\nPoema:\n\n");
    while(!feof(fp))
    {
        fgets(texto, 100, fp);
        printf("%s", texto);
        if (strlen(texto) < 99 && strlen(texto) > 1)
        {
            versos++;
        }
        else if (strlen(texto) == 1)
        {
            estrofes++;
        }
    }
    if (versos == 0)
    {
        printf("\nArquivo vazio");
    }
    else
    printf("\n\nO arquivo com o poema acima tem %d versos e %d estrofes.\n", versos, estrofes+1);

    fclose(fp);
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...