Duplicate the last line of the file . txt c++

Asked

Viewed 42 times

0

#include <fstream>
#include <vector>
using namespace std;
struct Produto
{
    string nomeProduto,quantidade,marca,preco;
};
void carregaProdutos(vector<Produto> &R)
{
    ifstream ler;
    Produto T;
    ler.open("Teste.txt",ios::in);
    while(ler.good())
    {
        ler>>T.nomeProduto>>T.quantidade>>T.marca>>T.preco;
        R.push_back(T);
    }
ler.close();
}
void salvaProdutos(vector<Produto> R){
    ofstream salva;
    salva.open("Teste.txt", ios::trunc);
    for(int i=0; i<R.size();i++)
    {
        salva<<R[i].nomeProduto<<" "<<R[i].quantidade<<" "<<R[i].marca<<" "<<R[i].preco<<endl;
    }
salva.close();
}
void inserirProduto()
{
    Produto P;
    ofstream inserir;
    inserir.open("Teste.txt",ios::app);
    cout<<"\tNome do produto:";
    cin>>P.nomeProduto;
    cout<<"\tQuantidade:";
    cin>>P.quantidade;
    cout<<"\tMarca:";
    cin>>P.marca;
    cout<<"\tPreco R$:";
    cin>>P.preco;
    inserir<<P.nomeProduto<<' '<<P.quantidade<<' '<<P.marca<<' '<<P.preco;

    inserir.close();
}
void apagarProduto()
{
    fstream abrir;
    fstream temp;
    abrir.open("Teste.txt",ios::in);
    temp.open("temp.txt",ios::out);
    string nomeApagar,n,q,m,p;
    cout<<"Informe o nome do produto para ser apagado:";
    cin>>nomeApagar;
    while(abrir.good())
    {
        abrir>>n>>q>>m>>p;
        if (nomeApagar!=n)
        {
            temp<<n<<' '<<q<<' '<<m<<' '<<p<<endl;
        }
    }
    abrir.close();
    temp.close();
    abrir.open("Teste.txt",ios::out);
    temp.open("temp.txt",ios::in);
    while(temp.good())
    {
        temp>>n>>q>>m>>p;
        abrir<<n<<' '<<q<<' '<<m<<' '<<p<<endl;
    }
    temp.close();
    abrir.close();
    remove("temp.txt");
}
int main() {
    vector<Produto> R;
    int rep;
    
    carregaProdutos(R);
    salvaProdutos(R);
    while(true){
    cout<<"\tO que deseja fazer\n";
    cout<<"\t1-Inserir produto\n\t2-Apagar produto\n\tOu aperte qualquer outro numero para sair:\n";
    cin>>rep;

    if(rep==1)
    {
        inserirProduto();
    }
    else if(rep==2)
    {
        apagarProduto();
    }
    else
    {
        break;
    }
    }
return 0; 
}

I did some tests in the program, and when I insert some products and soon after delete some, the txt file duplicates the last line.

  • Here: while(temp.good())&#xA; {&#xA; temp>>n>>q>>m>>p;&#xA; abrir<<n<<' '<<q<<' '<<m<<' '<<p<<endl;&#xA; } he will execute abrir<<n<<' '<<q<<' '<<m<<' '<<p<<endl; even if EOF occurred in the previous line.

  • And how do I fix it?

  • Immediately after reading check if the end of the file has been detected and only write if it has not been detected.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.