Fórum PiR2
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Arquivos com String

Ir em baixo

Arquivos com String Empty Arquivos com String

Mensagem por biel.paes Seg 08 Mar 2021, 19:12

Faça um programa que leia um arquivo (nomes.txt) que contém uma listagem de nomes (um por linha). O programa deverá salvar em outro arquivo a mesma listagem, mas invertida.( o invertida não é para ser de tras pra frente mais sim o nome da ultima posicão na primeira e assim sucessivamente............


nao consigo sair disso

#include (stdio.h)
#include (string.h)  nao está declaro entre <> porque o forum nao exibe

int main(){
    FILE *in, *out;
    char str[60];

    in = fopen("nomes.txt", "r");
    out = fopen("nomes_copia.txt", "w+");

    if(in==NULL){
        printf("ERRO!!!");
        return 1;
    }

    while(fgets(str, 60 , in) != NULL){

            fputs(str,out);
    }
    

    fclose(in);
    fclose(out);
}

biel.paes
iniciante

Mensagens : 12
Data de inscrição : 04/03/2021

Voltar ao Topo Ir em baixo

Arquivos com String Empty Re: Arquivos com String

Mensagem por Victor011 Seg 03 Maio 2021, 22:43

Oi biel.paes!  Smile
Há várias formas de fazer essa questão, inclusive usando C++. Porém, partindo do princípio que temos apenas a linguagem C, a solução mais interessante ao meu ver seria criar uma String e concatenar os valores nela, separados por "\n", e no final apenas escrever a String resultante no arquivo de destino. Veja:

Código:
#include<stdio.h>
#include<string.h>

int main(){
    FILE *in, *out;
    char str[60], istr[1000] = "";
    int cnt = 0;

    in = fopen("nomes.txt", "r");
    out = fopen("nomes_copia.txt", "w+");

    if(in==NULL){
        printf("ERRO!!!");
        return 1;
    }

    while(fgets(str, 60 , in) != NULL){
      if(feof(in)) strcat(str, "\n");
      strcat(str, istr);
      strcpy(istr, str);
    }
    
    fputs(istr, out);

    fclose(in);
    fclose(out);
}


istr é a String que queremos montar. Veja que como o fgets lê todos os caracteres da linha até o \n, e como na última linha não tem \n, é necessário concatenar o \n manualmente quando chega no fim do arquivo (por isso o feof).

OBS: Esse código só é válido para nomes formados por uma única String. Caso haja mais de uma String por linha, é necessário adaptar o código, provavelmente trocando o fgets por uma outra forma de leitura que pegue a linha inteira. Porém, a ideia central continuará sendo a mesma.
Victor011
Victor011
Mestre Jedi
Mestre Jedi

Mensagens : 603
Data de inscrição : 21/10/2015
Idade : 22
Localização : Rio de Janeiro, Brasil

Voltar ao Topo Ir em baixo

Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum