Ho creato per prova in c++ un semplice editor.
Questo è il codice:
codice:
#include <iostream.h>
#include <stdlib.h>
#include <fstream.h>
#include <string>
int main()
{
string nomefile;
string testo;
cout << "Come si chiama il file che vuoi creare?\n";
getline(cin, nomefile);
cout << endl;
ifstream ifile(nomefile.c_str());
if(!ifile)
{
cout << "Il file non esiste e verra' creato...\n";
ofstream ofile(nomefile.c_str());
}
else
{
cout << "Il file e' gia' esistente. Questo è il file:\n\n\n----------------\n";
string line;
while (!ifile.eof())
{
getline(ifile, line);
cout << line << endl;
}
ifile.close();
cout << "-----------\nFine del file.\n\nDesideri [A]ggiungere informazioni o [S]ovrascriverle?\n";
string scelta;
int iscelta;
cin >> scelta;
if (scelta == "A" || scelta == "a")
{
iscelta = 1;
}
if (scelta == "S" || scelta == "s")
{
iscelta = 2;
}
if (iscelta == 1)
{
ofstream ofile(nomefile.c_str(), ios::app);
}
else if (iscelta == 2)
{
ofstream ofile(nomefile.c_str(), ios::trunc);
}
else
{
cout << "Stupido! Dovevi premere \"A\" o \"S\"!";
system("PAUSE");
return 1;
}
}
if (! ofile)
{
cout << "Errore!\n";
return 1;
}
else
{
cout << "Ok, file aperto. Cosa vuoi scrivere nel file?\n";
getline(cin, testo);
cout << endl;
ofile << testo;
cout << "File scritto!";
ofile.close();
}
system("PAUSE");
return 0;
}
ho 2 problemi: il codice così com'è, in dev bloodshed, mi dà il seguente errore:
In function `int main()':
57: `ofile' undeclared (first use this function)
57: (Each undeclared identifier is reported only once
57: for each function it appears in.)
Il problema è quell' (!ofile). Non capisco perchè il compilatore faccia storie, non si può passare da quel pezzo di codice senza essere passati da uno degli ofstream ofile(blablabla).
Se dichiaro ofile all'inizio del programma senza argomenti, i vari ofile successivi non hanno effetto e non posso scrivere sul file.
Altro problema: In questo programma chiedo 3 input dall'utente: nomefile, scelta e testo. Dopo nomefile posso chiedere scelta senza problemi, ma quando chiedo testo se non prepongo cin.ignore() alla richiesta di input l'input viene richiesto ed autofornito con un acapo. Da quello che ho capito è un invio "latente" dai primi input che soddisfa subito la richiesta del 3o input. Ma perchè non si presenta con la seconda richiesta?
Inoltre: perchè ad una "é" nel codice non corrisponde una "è" di output? Set di caratteri diverso?
Thx