Problema con lettura/scrittura file

di il
14 risposte

Problema con lettura/scrittura file

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;
}

14 Risposte

  • Re: Problema con lettura/scrittura file

    Spiega meglio il problema ...
  • Re: Problema con lettura/scrittura file

    Alla fine dopo il do-while quando mi dovrebbe dire le operazioni che ho compito , mele dice, ma mi da l'operatore dell'ultima operazione inserita dal terminale mi esce cosi:
    (dovrebbe essere(pot)la prima e (add) la seconda. se lo compili e lo provi capisci meglio penso
    record operazioni: 5(sott)6= 15625
    record operazioni: 3(sott)4= 7
    record operazioni: 4(sott)= -1
  • Re: Problema con lettura/scrittura file

    Cagatemi v.v
  • Re: Problema con lettura/scrittura file

    davidegh ha scritto:


    cagatemi v.v
    Ti sembrano modi civili di rivolgerti alla gente ... ma per favore ...
  • Re: Problema con lettura/scrittura file

    Se non avessi aggiunto il v.v
    sarei d'accordo con tè.........
    cmq visto il fatto che vedo gente attiva rispondere ad altri topic la domanda sorge spontanea
  • Re: Problema con lettura/scrittura file

    Il v.v non ha alcuna importanza ... puoi sempre esprimerti decentemente.
  • Re: Problema con lettura/scrittura file

    OK mi esprimerò decentemente ma nessuno ancora mi ha dato un minimo help
  • Re: Problema con lettura/scrittura file

    X davidegh: in questo forum ci si esprime in maniera educata e si legge il regolamento prima di scrivere.
    Se non si riceve subito una risposta si porta pazienza.
  • Re: Problema con lettura/scrittura file

    Ok attenderò (invano mi sa ) .
  • Re: Problema con lettura/scrittura file

    Ho provato il codice e mi ha funzionato.

    Cosa hai inserito esattamente da tastiera in modo da replicare l'input?
  • Re: Problema con lettura/scrittura file

    Io ho provato adesso molt x:3 y:4 , poi risopondi s , div x:3 y:4 , poi risopondi s, sott x:3 y:4 poi rispondi n
    alla fine mi vien fuori
    record operzioni: 3(sott)4=12 qua dovrebbe esser (molt)
    record operzioni: 3(sott)4=0.75 qua dovrebbe essere (div)
    record operzioni: 3(sott)4=-1
  • Re: Problema con lettura/scrittura file

    Nessuno?
  • Re: Problema con lettura/scrittura file

    A me risulta

    record operazioni: 3(molt)4= 12
    record operazioni: 3(div)4= 0.75
    record operazioni: 3(sott)4= -1

    L'unica variazione che ho apportato al programma è cambiare

    #include <cstring>
    in
    #include <string>

    dato che servono le stringhe del C++

    ATTENZIONE: ho usato il Visual C++ ... probabilmente se usi DevC++/mingw che sono profondamenti buggati specialmente sulle stringhe, hai quel problema ... ti consiglio di cambiare ambiente e compilatore.
  • Re: Problema con lettura/scrittura file

    Ho cambiato con string ma non mi viene comunque , si uso dev e vedo in tanti che dicono che fa abbastanza pena, adesso mi scarico visual c++ e provo
Devi accedere o registrarti per scrivere nel forum
14 risposte