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

Arquivos com String

2 participantes

Ir para 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 : 21
Data de inscrição : 04/03/2021

Ir para o topo Ir para 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
Fera
Fera

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

biel.paes gosta desta mensagem

Ir para o topo Ir para baixo

Ir para o topo


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