Newsgroup: it.comp.lang.c++
Titolo: Problemi con classe fstream

Ho un paio problema con la classe fstream.h:
se uso il comando ofstream nome_variabile ("nome_file");
apre il file solo se l'eseguibile è nella stessa directory del file. Se io
volessi specificare il percorso del file da aprire come posso fare?
Inoltre se apro un file.txt riempito precedentemente da stringhe come posso
confrontarle con altre stringhe. Ho provato con getline, ma non riesco.
grazie di un eventuale aiuto

Questo e' uno scheletro di programma per leggere un file:
(1) un carattere la volta,
(2) una parola la volta,
(3) una linea la volta.
Allo scopo, e' sufficiente attivare il relativo loop.
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
fstream f;
main()
{
   string NomeF = "C:\\FileProva\\Prova2.txt";
   f.open(NomeF.c_str(), ios::in);
   if(!f)
   {  cout << "impos. aprire file " << NomeF << endl;
      system("PAUSE");
      exit(1);
   }
   char c; string s;
   //while(f.get(c)) cout << c;            // caratteri
   //while(f >> s) cout << s << endl;      // parole
   while(getline(f, s)) cout << s << endl; // linee
   cout << endl;
   f.close();
}
-- 
Posted from 
dsiaq1.ing.univaq.it
 [192.150.194.32] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


Se le stringhe sono separate da spazi basta leggere una std::string:
std::string str;
file >> str;
Manlio Perillo

      exit(1);
Sia system che exit sono dichiarate in header di sistema
che non hai incluso.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

ofstream foo("C:/Windows/
win.com
");
Che cattiveria... un output file stream aperto su
win.com
 ... immagino che per mostrare come si usa
la chiamata system tu chiameresti "deltree" giusto ? :D


Non e' tollerata dai compilatori questa dichiarazione, cosi' come l'assenza
del "return 0;"? Il problema e' che nell'ipotesi di spiegare il C++ a un
novizio, la presenza dell'"int main()" crea all'inizio solo problemi. E'
piu' accettabile (da un neofita, magari abituato al Pascal) la "mai() { ...
}" che non "int main() { ... }". Che ne pensi?.
CesareP.


 }" che non "int main() { ... }". Che ne pensi?.
No.  Perche' insegnare cose sbagliate?  main ritorna un intero.
Punto.  E non capisco cosa ci sia di problematico...
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it
Murphy's law: "Anything that can go wr
/bin/fortune: segmentation fault - core dumped

}" che non "int main() { ... }". Che ne pensi?.
main() in C++ non e' legale.
int main() si'.
Non vedo che cosa ci sia di cosi' problematico per un novizio.
Se e' un novizio, gli andra' bene anche :
dinosauro main()
--
Andrea Laforgia (ICQ 87230455)
"Esistono due modi per elaborare il progetto di un software.
 Il primo consiste nel renderlo semplice al punto che non
 manifesti lacune evidenti. Il secondo consiste nel renderlo
 complicato al punto che non manifesti lacune evidenti.
 Il primo metodo e' di gran lunga piu' difficile." [C.A.R. Hoare]

 Punto.  E non capisco cosa ci sia di problematico...
Io credo che se il compilatore accetta la sintassi "main() {... }", un motivo ci
dev'essere. Visto che nella maggior parte dei casi occorre scrivere un "return 0;"
alla fine, se il compilatore accetta l'assenza di questo "return 0;" secondo me è
il caso di approfittarne e semplificare il codice. Immagina di scrivere in uno
pseudocodice la struttura di un programma: probabilmente raccoglierai tutto il
codice all'interno di una coppia begin-end, al termine della quale non ti viene
naturale scrivere "return 0;". Nel caso del  C++, la coppia begin-end è sostituita
dalla scritta "main() {...}", e questo non comporta forzature. Scrivere "int
main() {... return 0; } io la trovo una forzatura, a uno stadio iniziale. Io mi
metto nei panni di uno studente di 15 anni o di un insegnante abituato/a al
Pascal. Non mi risulta che in Ada ci sia un "return 0;" finale (l'Ada è un diretto
discendente del Pascal e nato attraverso precisissime e severissime specifiche di
ingegneria del software). Sarei pronto a scommettere che nemmeno in Eiffel esite
un return finale. Non ho adesso qui un libro su Java... Il return finale e' una
conseguenza della discendenza dal C. Mi pongo questo problema poiché sto scrivendo
un libro introduttivo al C++ e per me è importante decidere in un senso o
nell'altro. Io stesso sto cercando di capire cosa fare. Avevo iniziato scrivendo
"void main() {...}", e alcuni libri americani e non hanno in effetti optato per
questa soluzione. Però qui la critica è che per lo standard la main deve
restituire un int, però metterci quell'int davanti mi sembra innaturale (in un
primo approccio), allora ho optato per la soluzione intermedia: visto che il
compilatore l'accetta, non scrivo niente, cosicché è un int ma non si vede! Se ti
viene in mente qualcosa fammela sapere.
Grazie. CesareP.

 Punto.  E non capisco cosa ci sia di problematico...
Soprattutto se si assume che un novizio faccia fatica a capire che main
ritorna un intero, mi domando come si possa sperare che un giorno
capisca la specializzazione parziale dei template ed altre amenita' del
genere.
Ciao,
Nicola

 viene in mente qualcosa fammela sapere.
Nel 2000 esistono solo due approcci accettabili nel documentare il C++:
o si documenta il linguaggio supportato da uno strumento specifico (tipo
Visual C++, ad esempio) o si documenta il linguaggio descritto dallo
standard (questo e' l'approccio che preferisco). In entrambe i casi e'
indispensabile il *rigore assoluto*.
void main() e' sbagliato perche' secondo lo standard main *deve*
restituire un int.
main() e' sbagliato perche' lo standard non prevede l'int implicito.
Scusa, ma da quanto hai scritto nel tuo messaggio non mi pari
qualificato per scrivere un libro, ne sul C++ ne su qualsiasi altro
linguaggio di programmazione. Questo perche' il tuo approccio
fondamentale e' sbagliato: ti sforzi di trasformare il C++ in qualche
cosa che piace a te e non compi lo sforzo di capire la filosofia del
linguaggio.
Ciao,
Nicola

viene in mente qualcosa fammela sapere.
A me viene in mente che questo non e' un buon presupposto per fare
della tua introduzione al C++ una buona guida da seguire.
Con l'intento di fare del bene, a mio avviso, si sta facendo del male.
E' il mio punto di vista, chiaramente, opinabile come sempre.
--
Andrea Laforgia (ICQ 87230455)
"A C program's trick is sometimes a C++ program's trap"
                                          [S.B.Lippman]

 compilatore l'accetta, non scrivo niente, cosicché è un int ma non si vede!
Ti hanno gia' detto che la sintassi non e' accettabile in C++.
Il primo dovere di chi insegna non e' quello di insegnare cose
naturali, ma di insegnare cose corrette (il fatto che la velocita'
della luce sia indipendente dal riferimento e' corretto ma non
naturale, ad esempio); o vuoi finire vituperato come Herbert Schildt
(
http://www.lysator.liu.se/c/schildt.html
 come poco tempo fa segnalato
anche qui)?


 dev'essere.
Ah, dimenticavo: non confondere quello che un compilatore accetta
(quale compilatore?) con quello che e' corretto usare.
MLO@pcdf0 16 $ cat foo.cxx
#include <iostream>
main() { std::cout << "Hello, world" << std::endl; }
MLO@pcdf0 17 $ g++ -ansi -Wall -o foo foo.cxx 
foo.cxx:2: warning: ANSI C++ forbids declaration `main' with no type
MLO@pcdf0 18 $


 linguaggio di programmazione
Questa frase è molto offensiva. Ora il problema non è più il C++, ma la qualità della
discussione. Non gradisco discutere con persone il cui approccio al dialogo non è basato
innanzitutto sul rispetto reciproco. Questa è una regola rispetto alla quale le regole
sintattiche del C++ sono una *nullità*.
CesareP.



 linguaggio.
In questo poi ci sono due aspetti: uno riguarda te personalmente, in
quanto a mio avviso perseverando nel tuo punto di vista ti troverai
sempre a far piu' fatica del dovuto e non potrai mai ottenere il massimo
dagli strumenti a tua disposizione. L'altro, che trovo ancora piu'
grave, e' che tramite il tuo libro e le imprecisioni che inevitabilmente
conterra' (in base a quanto hai detto di volerci scrivere) travaserai il
tuo approccio sbagliato sui tuoi lettori, che proprio perche' inesperti,
potrebbero non avere sufficiente senso critico per discernere il buono
dal cattivo nel suo contenuto. 
Questo lo trovo sufficientemente grave da giustificare la durezza del
mio messaggio precedente. Se mi sono sbagliato, tanto meglio, ma non
aspettarti una ritrattazione se prima non dimostri il mio errore.
E al tuo posto il fatto di aver scatenato una salva di messaggi che, sia
pure diversi per tono, ti rinfacciano tutti le stesse cose, mi darebbe
da pensare.
Ciao,
Nicola

sintattiche del C++ sono una *nullità*.
Credo che ne' Nicola, ne' nessun altro qui dentro, ti abbia mancato di
rispetto. Il tuo e' un modo troppo semplice per troncare le
discussioni.


Se ti viene in mente qualcosa fammela sapere.
Provo un po' di tristezza per i potenziali lettori.
--
----------------------------------------------------------------
 <\___/>  Andrea        email: agriff at tin dot it
 / . . \  "6502"          irc: _6502_@EFNET#italia
(  (")  ) Griffini   homepage: 
http://www.netservers.com/~agriff
Sent via Deja.com 
http://www.deja.com/
Before you buy.

 regole sintattiche del C++ sono una *nullità*.
Hmmm... essere ritenuti qualificati per scrivere libri su C++ o
su linguaggi di programmazione e' diventato un diritto ?
Condivido la posizione di Nicola:
  1) Sul C++ sai evidentemente poco (non considerarla
     una offesa... penso che la cosa valga per moltissime
     persone, me incluso)
  2) La poca correttezza formale con cui consideri i
     linguaggi di programmazione penso ti renderebbe
     un insegnante pericoloso.
Se e' vero che personalmente sono convinto che in un testo
introduttivo molto e' nel metodo e non nel contenuto e' anche
vero secondo me che insegnare cose false non e' corretto.
Al massimo si puo' evitare di dire tutta la verita' se questa
e' di difficile comprensione.
In programmazione esiste un grande spazio per i "secondo me",
ma non sulla sintassi C++ (a parte forse qualche angolo buio
dei template).
Andrea


 Condivido la posizione di Nicola:
E che non sia assolutamente un'offesa lo dimostra il fatto che,
immagino, la maggior parte di noi non si ritiene qualificato per tale
compito. Sbaglio?
EMG

 "void main() {...}"
eh, sèèè!!! Perchè non scrivi:
lo standard dice di scrivere int main (), però è brutto, innaturale, decidete voi se
utilizzare
main() e basta, void main() o qualunque altra cosa accettata dal vostro compilatore :)

 dinosauro main()
Ok. Mi sono convinto e ci ho fatto anche l'occhio:
int main()
{
}
CesareP.