Alcuni dubbi (C++)

Lale1
Ciao a tutti.. Sono alle prime armi con il C++ e mi sono sorti dei dubbi, forse banali ma per me non così scontati..
Proverò ad esporveli, e se qualcuno avrà la pazienza e la voglia di aiutarmi gliene sarò molto grata.. :>

1) Questo programmino stampa n asterischi, con n dato:

#include
#include
using namespace std;
int main() {
int n;
cout<<"Quanti asterischi?"< cin>>n;
while (n--)
cout<<'*';
cout< system("PAUSE");
return 0;
}

Mi è stato detto che in questa forma esso non termina se n<0. In che senso?


2) Perché per scrivere qualcosa in un file in append bisogna utilizzare la formula ios::out | ios::app ? Intendo dire, qual è il significato logico di inserire un OR qui dentro?

3) Il costrutto

while (ff.get(c))
cout<
(dove c è di tipo char) a cosa si riferisce esattamente? Mi è stato detto che la funzione get permette di leggere anche gli spazi, ma cosa significa in questo caso? "Quali" spazi vengono letti se è riferita a un char?

4) Questo programma scrive 4 interi nel file "esempio". Poi apre il file in lettura e stampa su video il suo contenuto.

#include
#include
#include
using namespace std;
int main ()
{
fstream ff;
int num;
ff.open("esempio", ios::out);
if (!ff)
{
cerr<<"Il file non può essere aperto"< exit(1);
}
for (int i=0; i<4; i++)
ff< ff.close();
ff.open("esempio", ios::in);
if(!ff)
{
cerr<<"il file non può essere aperto"< exit(1);
}
while (ff>>num)
cout< system("PAUSE");
return 0;
}

L'uscita a video è effettivamente
0 1 2 3

ma perché non trovo gli stessi numeri scritti anche nel file "esempio"?


5) Qual è la differenza (se c'è) tra chiamata di una funzione e istanza di una funzione?

6) Il programma qui sotto apre in lettura il file "esempio" e legge N numeri interi. Poi controlla che le istruzioni di lettura non portino lo stream in stato di errore.

#include
#include
#include
using namespace std;
int main ()
{
fstream ff;
int i, num;
const int N = 6;
ff.open("esempio", ios::in);
if(!ff)
{
cerr<<"Il file non può essere aperto"< exit (1);
}
for (i=0; i>num; i++)
cout< cout< if (i != N)
cerr<<"Errore nella lettura del file"< system("PAUSE");
return 0;
}

Il mio dubbio (l'ultimo!) è: perché in uscita ottengo sempre

0 1 2 3
Errore nella lettura del file

? Dove sta l'errore/l'inghippo?

Grazie mille anticipatamente a chi mi risponderà!
:)

Risposte
Andrearufus
brutta bestia il c++..non ci ho mai capito niente :(

alberto.cena
"Lale":
Ciao a tutti.. Sono alle prime armi con il C++ e mi sono sorti dei dubbi, forse banali ma per me non così scontati..
Proverò ad esporveli, e se qualcuno avrà la pazienza e la voglia di aiutarmi gliene sarò molto grata.. :>

1) Questo programmino stampa n asterischi, con n dato:

#include
#include
using namespace std;
int main() {
int n;
cout<<"Quanti asterischi?"< cin>>n;
while (n--)
cout<<'*';
cout< system("PAUSE");
return 0;
}

Mi è stato detto che in questa forma esso non termina se n<0. In che senso?


Prova a sostituire la condizione contenuta nel while con
while(n-- > 0)
In questo caso se assegni ad n un valore negativo ottieni in output nessun asterisco.
La struttura iterativa while ripete una azione, in questo caso la stampa di *, finché la condizione tra parentesi è vera. Nota che il -- dopo l'enne decrementa di 1 il contatore n ad ogni stampa.
Se poni n negativo, la condizione n-->0 è falsa e il programma esce immediatamente dal ciclo while.
La condizione posta nel while è una variabile booleana: true o false.
All'interno di un while puoi inserire anche una variabile intera. Il valore 0 equivale a falso, tutti gli altri equivalgono a vero.
Cosa succede con while(n--)?
Se assegni ad n un valore negativo, il ciclo si ferma quando il contatore n, diminuendo di 1, diventa uguale a 0=false. Se invece n è inizialmente un valore negativo, diminuendo di 1, rimane un numero negativo=true, quindi il ciclo non si arresta.

alberto.cena
"Lale":

4) Questo programma scrive 4 interi nel file "esempio". Poi apre il file in lettura e stampa su video il suo contenuto.

#include
#include
#include
using namespace std;
int main ()
{
fstream ff;
int num;
ff.open("esempio", ios::out);
if (!ff)
{
cerr<<"Il file non può essere aperto"< exit(1);
}
for (int i=0; i<4; i++)
ff< ff.close();
ff.open("esempio", ios::in);
if(!ff)
{
cerr<<"il file non può essere aperto"< exit(1);
}
while (ff>>num)
cout< system("PAUSE");
return 0;
}

L'uscita a video è effettivamente
0 1 2 3

ma perché non trovo gli stessi numeri scritti anche nel file "esempio"?


Nel file esempio io trovo 0 1 2 3... quali altri numeri trovi?

Lale1
Molto chiara la prima risposta, ti ringrazio!
Per quanto riguarda la seconda, io nel file esempio non trovo niente.
Io quel file l'ho creato con Notepad, e l'ho lasciato vuoto. Ma mi risulta vuoto anche dopo l'esecuzione del programma.

alberto.cena
Io uso il compilatore GNU gcc in ambiente Linux. Non creo il file esempio prima dell'esecuzione del programma; il programma lo crea con 0 1 2 3. Controlla i percorsi ed assicurati che il programma non crei un altro file esempio...

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.