PDA

Visualizza la versione completa : [C++] scrittura su FILE


Salvatore_91
09-02-2009, 15:52
CIao raga sto iniziando a studiare i FILE, e adesso volevo fare un piccolo programma che mi permette di scrivere su un file.


# include <iostream>
using namespace std;

struct formato
{
string strin;
};

int main()
{
FILE *testo;
testo = fopen("prova.txt","testo");

// lettura
struct formato a;
scanf("%s",&a.strin);


// scrittura
fprintf(testo, "%s",a.strin);
system("PAUSE");
}


ma quando lo eseguo mi dice di fare la segnalazione di errori a Windows.

YuYevon
09-02-2009, 15:58
Hai sbagliato la chiamata della funzione "fopen()"... il secondo argomento deve essere la modalità con la quale vuoi aprire il file (r per lettura, w per la scrittura ecc...)

Comunque se lavori col C++ forse sarebbe più corretto (e per certi versi più semplice) lavorare con gli stream associati ai file, definiti in fstream, piuttosto che gestire i file come nel linguaggio C.

Salvatore_91
09-02-2009, 16:15
Ad esempio questo pezzo di programma mi dovrebbe leggere il contenuto del file prova.txt???


#include <iostream>
#include <fstream.h>

ifstream FlussoDiInput;
using namespace std;

int main()
{

FlussoDiInput.open("prova.txt", ios::out);
system("PAUSE");
}

Pacio88
09-02-2009, 16:34
No così lo stai aprendo in modalità di scrittura...
Per aprirlo in modalità lettura devi specificare come parametro ios::in.

Salvatore_91
09-02-2009, 16:39
Ho scritto così, ma il compilatore mi dice:
#warning This file includes at least one deprecated or antiquated header.


#include <iostream>
#include <fstream.h>

ifstream FlussoDiInput;
//ofstream FlussoDiOutput;
using namespace std;

int main()
{

FlussoDiInput.open("prova.txt", ios::in);
system("PAUSE");
}

YuYevon
09-02-2009, 16:41
Tra l'altro non sarebbe nemmeno accettata la modalità ios::out essendo lo stream dichiarato "ifstream", cioè strem associato ad un file di input.

Ti consiglio comunque di dichiarare quello stream localmente al main (e non globalmente) e di utilizzare l'header in stile C++ "fstream", piuttosto che il vecchio header file "fstream.h" stile C.

Consiglio: quando apri uno stream associato ad un file di input, questo viene automaticamente aperto in modalità di lettura, quindi non ci sarebbe nemmeno bisogno di scrivere "ios::in"... ma magari scrivilo lo stesso così ti ci abitui.

Edit: il warning ti segnala esattamente il fatto che ti dicevo sull'header file fstream.h... cambialo con fstream.

Salvatore_91
09-02-2009, 16:44
YuVevon, mettendo la libreria così:
#include <fstream>
il compilatore mi da errore

oregon
09-02-2009, 16:45
"Il compilatore mi da' errore" ... e l'errore qual e'?

YuYevon
09-02-2009, 16:46
#include <iostream>
#include <fstream>
using namespace std;


evidentemente perché dichiari lo stream di input prima dell'istruzione "using namespace std"... ti ho già consigliato di dichiarare quello stream dentro al main, o comunque dopo le tre istruzioni che ti ho scritto sopra se no è ovvio che il compilatore protesta :)

Salvatore_91
09-02-2009, 16:48
allora, riepilogando, adesso dichiarando in questo modo mi funziona:


#include <iostream>
#include <fstream>

using namespace std;

int main()
{
ifstream FlussoDiInput;
FlussoDiInput.open("prova.txt", ios::in);
system("PAUSE");
}


Io nel file prova.txt, ci ho scritto una stringa,
ma quando eseguo il programma non mi esce niente.

Loading