Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [c++] domanda (y/n)

  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142

    [c++] domanda (y/n)

    ciao a tutti, volevo fare una semplice domanda con risposta y/n, leggendo un po' di manuali penso di averlo fatto ma ho un problema che non riesco a capire, probabilmente sarà una sciocchezza ma non la trovo

    Codice PHP:
    do {
            
    cout<<endl<<"Ritornare al menu? (y/n) :  ";
            
    ris=getchar();
            }
            while ((
    ris!='y') && (ris!='n'));
            if (
    ris=='n'temp=1
    però mi scrive sempre
    Ritornare al menu? (y/n) :
    Ritornare al menu? (y/n) :


    xchè me lo scrive 2 volte? non riesco acapirlo

    grazie

    p.s. una parentesi: ma se sto programmando esclusivamente in c++ devo x forza usare endl x andare daccapo o posso usare anche \n?

  2. #2
    Anzichè usare getchar(), usa un semplice cin, no?

    codice:
    cout<<endl<<"Ritornare al menu? (y/n) :  ";
    cin>>ris;
    Così funziona, non saprei spiegarti il motivo, forse prende l'invio come carattere, ma è solo un'ipotesi...

    Riguardo l'altra domanda, no, puoi usare anche il \n per andare a capo. Ciao.

    edit: credo proprio sia l'invio, infatti se provi ad inserire più caratteri ti ristampa la domanda tante volte quanti sono i caratteri inseriti.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Solito stranoto problema col '\n' che viene salvato nel buffer ecc... risolvi così:

    codice:
    	do {
    		cout<<endl<<"Ritornare al menu? (y/n) :  ";
    		ris=getchar();
    		while ( getchar() != '\n' );
                    // o anche fflush(stdin) ma la prima soluzione è migliore
    	} while ((ris!='y') && (ris!='n'));
    p.s. una parentesi: ma se sto programmando esclusivamente in c++ devo x forza usare endl x andare daccapo o posso usare anche \n?
    Tutto ciò che puoi fare in C puoi farlo ugualmente in C++ (il viceversa non vale ovviamente). Se in C puoi usare '\n', lo puoi fare anche in C++... ma perché non ricorrere alle caratteristiche proprie del C++, visto che il risultato è comunque lo stesso?

    Comunque endl non è da considerarsi un semplice alias di '\n'

    http://www.cplusplus.com/reference/i...pulators/endl/

    anche se l'effetto sembrerebbe dimostrare il contrario.
    every day above ground is a good one

  4. #4
    Originariamente inviato da YuYevon
    anche se l'effetto sembrerebbe dimostrare il contrario.
    Occhio: endl non effettua il flushing dello stream di input, ma di output.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da MItaly
    Occhio: endl non effettua il flushing dello stream di input, ma di output.
    Beh sì, ci si riferiva allo stream di output infatti.
    every day above ground is a good one

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    142
    grazie a tutti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.