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

di Anonimizzato12853 il
4 risposte
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

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