Salve, ho iniziato da poco a usare le operazioni e di lettura/scrittura su file, e anche la funzione struct. per provare un po ho fatto una semplice calcolatrice che scrive su un file.txt le operazioni che vengono svolte dalla calcolatrice , e alla fine le mostra. il mio problema e che alla fine i numeri vengono giusti, ma le operazione vengono tutte con il nome dell'ultima fatta. non so se mi spiego bene metto screen.
#include <iostream>
#include<fstream>
#include<math.h>
#include <cstring>
#include <cstdlib>
#define MAX 10
using namespace std;
struct MyRecord {
string operazione;
double x;
float y;
long double ris;
};
int main(){
char risp, ripeti;
struct MyRecord acc;
ofstream recordcalc("rrecord.txt");
do{
system("cls");
cout << "quale operazione vuoi eseguire?(scrivere parola tra parentesi)"<<endl;
cout << "Moltiplicazione(molt)"<<endl;
cout << "Divisione(div)"<<endl;
cout << "Addizione(add)"<<endl;
cout << "Sottrazione(sott)"<<endl;
cout << "Elevamento a potenza(pot)"<<endl;
cin >> acc.operazione;
if(acc.operazione=="pot"){
cout << " inserisci valore x (base) : " << endl;
cin >> acc.x;
cout << " inserisci valore y (esponente) : " << endl;
cin >> acc.y;
acc.ris= pow(acc.x,acc.y);
cout<< " risultato : " << acc.ris<< endl;
recordcalc.write((char*) &acc , sizeof (struct MyRecord));
}
if(acc.operazione=="sott"){
cout << " inserisci valore x : " << endl;
cin >> acc.x;
cout << " inserisci valore y : " << endl;
cin >> acc.y;
acc.ris= acc.x - acc.y;
cout<< " risultato : " << acc.ris<< endl;
recordcalc.write((char*) &acc , sizeof (struct MyRecord));
}
if(acc.operazione=="add"){
cout << " inserisci valore x : " << endl;
cin >> acc.x;
cout << " inserisci valore y : " << endl;
cin >> acc.y;
acc.ris= acc.x + acc.y;
cout<< " risultato : " << acc.ris<< endl;
recordcalc.write((char*) &acc , sizeof (struct MyRecord));
}
if(acc.operazione=="molt"){
cout << " inserisci valore x : " << endl;
cin >> acc.x;
cout << " inserisci valore y : " << endl;
cin >> acc.y;
acc.ris= acc.x * acc.y;
cout<< " risultato : " << acc.ris<< endl;
recordcalc.write((char*) &acc , sizeof (struct MyRecord));
}
if(acc.operazione=="div"){
cout << " inserisci valore x : " << endl;
cin >> acc.x;
ripeti:
cout << " inserisci valore y(diverso da 0) : " << endl;
cin >> acc.y;
if(acc.y==0){
cout<< " genio non puoi dividere per 0 xD "<< endl;
goto ripeti;
}
acc.ris=acc.x / acc.y;
cout<< " risultato : " << acc.ris << endl;
recordcalc.write((char*) &acc , sizeof (struct MyRecord));
}
cout<< "eseguire altra operazione(s/n)?"<< endl;
cin>>risp;
}while(risp!='n');
recordcalc.close();
ifstream recordcalcc("rrecord.txt");
recordcalcc.read((char*) &acc, sizeof (struct MyRecord));
while(! recordcalcc.eof()){
cout <<"record operazioni: "<< acc.x << "(" << acc.operazione << ")"<< acc.y << "= "<< acc.ris<< endl;
recordcalcc.read((char*) &acc, sizeof (struct MyRecord));
}
recordcalcc.close();
return 0;
}