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())
 {
 temp>>n>>q>>m>>p;
 abrir<<n<<' '<<q<<' '<<m<<' '<<p<<endl;
 }
he will executeabrir<<n<<' '<<q<<' '<<m<<' '<<p<<endl;
even if EOF occurred in the previous line.– anonimo
And how do I fix it?
– Lucas Souza Soares
Immediately after reading check if the end of the file has been detected and only write if it has not been detected.
– anonimo