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 <cstdlib>
#include <iostream>
using namespace std;
int main() {
int n;
cout<<"Quanti asterischi?"<<endl>>n;
while (n--)
cout<<'*';
cout<<endl;
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<<c;
(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 <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;
int main ()
{
fstream ff;
int num;
ff.open("esempio", ios::out);
if (!ff)
{
cerr<<"Il file non può essere aperto"<<endl;
exit(1);
}
for (int i=0; i<4; i++)
ff<<i<<endl;
ff.close();
ff.open("esempio", ios::in);
if(!ff)
{
cerr<<"il file non può essere aperto"<<endl>>num)
cout<<num<<'\t'<<endl;
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 <cstdlib>
#include <iostream>
#include <fstream>
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"<<endl;
exit (1);
}
for (i=0; i<N>>num; i++)
cout<<num<<'\t';
cout<<endl;
if (i != N)
cerr<<"Errore nella lettura del file"<<endl;
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à!
Alcuni dubbi (C++)
1) se ~n<0 alla partenza, ottieni un loop infinito. Presupponi che l'utente dia solo valori sensati ergo positivi o nulli. Questo e' un grave errore nella programmazione. Pensa che l'utente fara' di tutto per crasharti il programma.
3) qualunque carattere e' un char, anche gli spazi (intesi come spazio, tab e newline). Diciamo che tutto cio' che e' rappresentato nella tabella ASCII puo' essere immagazzinato in un char (che di solito ha dimensione 1 byte)
se non sbaglio quel codice legge da un input e stampa a schermo il contenuto
3) qualunque carattere e' un char, anche gli spazi (intesi come spazio, tab e newline). Diciamo che tutto cio' che e' rappresentato nella tabella ASCII puo' essere immagazzinato in un char (che di solito ha dimensione 1 byte)
se non sbaglio quel codice legge da un input e stampa a schermo il contenuto
impara il [tex]~\LaTeX[/tex] e mettilo da par[tex]\TeX~[/tex]
Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
Software is like sex: it's better when it's free (Linus T.)
membro: Club Nostalgici
Non essere egoista, dona anche tu! http://fpv.hacknight.org/a8.php
2) Perché si tratta di un OR di bit e non un OR logico (||)
serve a mettere insieme due numeri binari e quindi si presta bene a unire delle "flag" in un numero solo. Usalo così e prendilo come dogma se non hai voglia di approfondire
4)
6)
forse volevi scrivere
(ff>>num, num) significa "ricevi un numero da ff e mettilo in num, quindi usa num come risultato"
Spero di essere stato utile anche a un mese di distanza
serve a mettere insieme due numeri binari e quindi si presta bene a unire delle "flag" in un numero solo. Usalo così e prendilo come dogma se non hai voglia di approfondire
4)
Hai saltato delle righe quindi non posso dire dov'è il problema...cerr<<"il file non può essere aperto"<<endl>>num)
6)
Così fai uno shift a destra...for (i=0; i<N>>num; i++)
forse volevi scrivere
Codice: Seleziona tutto
for (i=0; i<ff>>num, num); i++)
Spero di essere stato utile anche a un mese di distanza
già che ci sono faccio un paio di domande pure io:
1)esiste una funzione che permette di ottenere input da tastiera senza premere invio? (qualcosa come il readkey di pascal)
2)in C++ per fare programmi con output grafici elementari (linee, punti e simili) è proprio necessario appoggiarsi a librerie come le win API ?
1)esiste una funzione che permette di ottenere input da tastiera senza premere invio? (qualcosa come il readkey di pascal)
2)in C++ per fare programmi con output grafici elementari (linee, punti e simili) è proprio necessario appoggiarsi a librerie come le win API ?
-
- Messaggi: 1776
- Iscritto il: 17 nov 2007, 19:12
Ci sarebbe la getchar(), anche se il mio consiglio è di scriverti sempre le cose da solo, se puoi.gst_113 ha scritto:1)esiste una funzione che permette di ottenere input da tastiera senza premere invio? (qualcosa come il readkey di pascal)
Ovviamente no, puoi fare a mano tutto quello che ti pare. Ma questo dipende molto dalla tua conoscenza a basso livello del computer e del sistema operativo.2)in C++ per fare programmi con output grafici elementari (linee, punti e simili) è proprio necessario appoggiarsi a librerie come le win API ?
[quote="Pigkappa"]Penso che faresti un favore al mondo se aprissi un bel topic di bestemmie da qualche parte in modo che ti bannino subito.[/quote]