Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Ciao ragazzi sono nuovo a questo linguaggio di programmazione, fino ad ora ho programmato in c#. Sono ancora agli inizi, sto studiando dal libro C++ di Bjarne Stroustrup.
Ecco il mio problema: quando cerco di fare un programmino anche stupido come un Hello world se scrivo:
Codice sorgente - presumibilmente Plain Text |
cout<<"hello world" << endl;
|
Mi stampa "hello world" però non aspetta che il mio invio per chiudere il programma. Allora ho provato a importare il <cstdio> e con getchar() funziona. Quando però provo a chiedere e importare dati usando il cin, smette di funzionare anche getchar...
Sapreste aiutarmi? (sicuramente sì )
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
1) che ambiente/compilatore usi ?
2) spiega nuovamente il problema, preferibilmente con il codice che ti da' problemi
|
|
Francesco88 (Normal User)
Newbie
Messaggi: 1
Iscritto: 27/09/2009
|
per usare il cin devi includere <iostream> ed importare il namespace std.
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da Francesco88:
per usare il cin devi includere <iostream> ed importare il namespace std.
|
Ha scritto
"Mi stampa "hello world" però non aspetta che il mio invio per chiudere il programma. "
quindi non ha problemi di compilazione ... |
|
munkaka (Member)
Pro
Messaggi: 119
Iscritto: 07/09/2008
|
Mi sembra che bisogna pulire il buffer o qualcosa del genere
devi mettere stdin(fflush) (o fflush(stdin) non mi ricordo bene) prima di getchar
|
|
Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Ho usato sia dev-cpp, sia visual c++ che qtcreator.
Ti do l'esempio fatto con dev cpp:
Codice sorgente - presumibilmente C/C++ |
#include <iostream>
using namespace std;
main()
{
cout<<"hello world"<<endl;
}
|
lo eseguo e mi stampa hello world. Non aspetta però che io dia invio per chiudere il programma. E' come se il mio endl non ci fosse.
Se uso questo codice funziona tutto:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstdio> using namespace std; main() { cout<<"hello world"; getchar(); }
|
Se invece uso questo:
Codice sorgente - presumibilmente C++ |
#include <iostream> #include <cstdio> #include <string> using namespace std; main() { string a; cout<<"come ti chiami?"; cin>>a; getchar(); }
|
Ignora il mio getchar(); e chiude il programma come se niente fosse. Quello che voglio fare io è quello che in .NET sarebbe un bel Console.ReadKey() prima della fine del programma |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da Hast:
lo eseguo e mi stampa hello world. Non aspetta però che io dia invio per chiudere il programma. E' come se il mio endl non ci fosse. |
Forse ti stai confondendo ma l' endl non serve ad attendere un input.
Serve solamente a far andare a capo il cursore dopo aver visualizzato la stringa.
Se uso questo codice funziona tutto: |
Ovviamente ... c'e' il getchar ...
E' l'effetto del buffering del cin.
Puoi risolvere inserendo un altro getchar, cioe'
getchar();
getchar();
oppure togli i getchar e inserisci un
system("PAUSE")
se lavori con Windows.
In alternativa, con Visual Studio, esegui il programma con Ctrl-F5 al posto del solo F5 |
|
Hast (Normal User)
Rookie
Messaggi: 52
Iscritto: 09/04/2009
|
Postato originariamente da theprogrammer:
E' l'effetto del buffering del cin.
Puoi risolvere inserendo un altro getchar, cioe'
getchar();
getchar();
|
Grazie mille ora funziona! Come mai succede questo? |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Perche' il tasto invio fornito con il cin, viene inserito nel buffer ma non utilizzato.
Viene quindi utilizzato subito dopo dalla prima getchar prima che tu te ne accorga.
|
|