Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problemi con endl
Forum - C/C++ - Problemi con endl

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 20:08
Domenica, 27/09/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

  1. 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ì :))

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:19
Domenica, 27/09/2009
1) che ambiente/compilatore usi ?

2) spiega nuovamente il problema, preferibilmente con il codice che ti da' problemi

PM Quote
Avatar
Francesco88 (Normal User)
Newbie


Messaggi: 1
Iscritto: 27/09/2009

Segnala al moderatore
Postato alle 20:35
Domenica, 27/09/2009
per usare il cin devi includere <iostream> ed importare il namespace std.
;)

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 20:39
Domenica, 27/09/2009
Testo quotato

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 ...

PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 20:40
Domenica, 27/09/2009
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

PM Quote
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 20:47
Domenica, 27/09/2009
Ho usato sia dev-cpp, sia visual c++ che qtcreator.
Ti do l'esempio fatto con dev cpp:
Codice sorgente - presumibilmente C/C++

  1. #include <iostream>
  2. using namespace std;
  3. main()
  4. {
  5.       cout<<"hello world"<<endl;
  6. }


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++

  1. #include <iostream>
  2. #include <cstdio>
  3. using namespace std;
  4. main()
  5. {
  6.       cout<<"hello world";
  7.       getchar();
  8. }



Se invece uso questo:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <string>
  4. using namespace std;
  5. main()
  6. {
  7.       string a;
  8.       cout<<"come ti chiami?";
  9.       cin>>a;
  10.       getchar();
  11. }



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

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:20
Domenica, 27/09/2009
Testo quotato

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.

Testo quotato

Se uso questo codice funziona tutto:



Ovviamente ... c'e' il getchar ...

Testo quotato

Se invece uso questo:



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

PM Quote
Avatar
Hast (Normal User)
Rookie


Messaggi: 52
Iscritto: 09/04/2009

Segnala al moderatore
Postato alle 21:52
Domenica, 27/09/2009
Testo quotato

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?

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 7:07
Lunedì, 28/09/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.

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo