Cin.get(); da inserire due volte per il funzionamento?

di il
4 risposte

Cin.get(); da inserire due volte per il funzionamento?

Salve a tutti, ho da poco iniziato a imparare la programmazione in c++, avendo qualche conoscenza di vb.net. Prima di terminare un programma, il compilatore wxDev inserisce questo:
cin.get();
Il problema è che non mi funziona, o meglio, devo inserirlo due volte per farlo funzionare, come qui..
#include <iostream>

using namespace std;

int main(){
    
double N;

cout << "Dato un numero, stabilire se e' naturale\n\n";
cout << "Inserisci un numero\n";
cin >> N;

if((int)N == N && N>0)
{
cout << "\nIl numero e' naturale";
}
else
{
cout << "\nIl numero non e' naturale";
}
cin.get();
cin.get();
return 0;
}
Insenerendone uno solo, dopo l'input il programma non si ferma

Vorrei sapere se è solo un problema mio..

Inoltre vorrei capire l'istruzione endl, perchè anche cercando su internet non ci ho capito molto

4 Risposte

  • Re: Cin.get(); da inserire due volte per il funzionamento?

    Cin.get() lo devi inserire due volte perche la prima volta ti prende il carattere new line rimasto nel buffer. Per inserirlo una volta sola devi fare così
    
    cin.ignore(100,'\n');
    cin.get();
    
    Con la prima svuoti il buffer, con la seconda aspetti un carattere.

    std::endl sarebbe il new line, ovvero ritorno a capo. esempio
    
    cout << "prova \n";
    cout << "prova 2" << endl;
    Sono due forme identiche per fare la stessa cosa
  • Re: Cin.get(); da inserire due volte per il funzionamento?

    skynet ha scritto:


    cin.get() lo devi inserire due volte perche la prima volta ti prende il carattere new line rimasto nel buffer. Per inserirlo una volta sola devi fare così
    
    cin.ignore(100,'\n');
    cin.get();
    
    Con la prima svuoti il buffer, con la seconda aspetti un carattere.
    Ok, grazie mille, ma potresti spiegarmi perchè va inserito 100, e \n?

    Grazie anche per endl
  • Re: Cin.get(); da inserire due volte per il funzionamento?

    Il 100 è un numero a caso. In pratica la funzione fa questo. Scarta fino a 100 caratteri (ma possono essere 1000, un milione ecc) oppure scarta finchè trova il \n (new line), chi dei due arriva prima.

    E' un modo x svuotare il buffer insomma. La forma più corretta è questa (anche se non la utilizzerai mai)
    
    #include <limits>
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    
    Scarta il massimo dei caratteri che il buffer può contenere, oppure finchè non trova un new line.
  • Re: Cin.get(); da inserire due volte per il funzionamento?

    skynet ha scritto:


    Il 100 è un numero a caso. In pratica la funzione fa questo. Scarta fino a 100 caratteri (ma possono essere 1000, un milione ecc) oppure scarta finchè trova il \n (new line), chi dei due arriva prima.

    E' un modo x svuotare il buffer insomma. La forma più corretta è questa (anche se non la utilizzerai mai)
    
    #include <limits>
    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    
    Scarta il massimo dei caratteri che il buffer può contenere, oppure finchè non trova un new line.
    ottimo, grazie di nuovo
Devi accedere o registrarti per scrivere nel forum
4 risposte