Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: pausa in c++

  1. #1

    pausa in c++

    come mettre la pausa alla fine di un programma in c++, evitando system(pasue);
    mi ricordo che c'entra qualcosa tipo
    cin.get
    cin.ignore
    ma siccome ho formattato il pc e ho cancellato tutto, non mi ricordo più, grazie comunque

  2. #2

    Re: pausa in c++

    Originariamente inviato da DiegoFilippo
    come mettre la pausa alla fine di un programma in c++, evitando system(pasue);
    mi ricordo che c'entra qualcosa tipo
    cin.get
    cin.ignore
    ma siccome ho formattato il pc e ho cancellato tutto, non mi ricordo più, grazie comunque
    Fai bene a evitare il System Pause, usa la getchar()

    Ciao

  3. #3
    puoi mettermi il codice completo, sai sono ancora agli inizi, altrimenti fa niente

  4. #4
    Perchè dici di evitare il system pause? Per informazione eh intendiamoci

  5. #5
    Originariamente inviato da DiegoFilippo
    puoi mettermi il codice completo, sai sono ancora agli inizi, altrimenti fa niente
    codice:
    //tuo codice
    getchar();    //qui si ha la pausa e il flusso del programma
                     //riprende con la pressione di un tasto
    //tuo codice
    Originariamente inviato da BabboNapoli
    Perchè dici di evitare il system pause? Per informazione eh intendiamoci
    A chi ti riferisci, a me o a DiegoFilippo?

  6. #6
    Originariamente inviato da BabboNapoli
    Perchè dici di evitare il system pause? Per informazione eh intendiamoci
    Perché non puoi essere sicuro di cosa fa esattamente. Lo standard prescrive che la system passi il tuo comando ad un interprete dei comandi, di cui non sai niente. Su Windows sarà - probabilmente - cmd.exe (quale versione? a seconda cambiano diverse funzionalità) o command.com (di nuovo, quale versione?), su Linux/Unix in genere sarà sh (quale versione?) ma - per quanto riguarda lo standard C++ - nulla impedisce che sia bash, ksh tcsh o chissà quale altra shell. Quello che funziona sulla shell che hai su questa particolare versione di Windows non è detto che funzioni con una versione più vecchia o più nuova, figuriamoci poi su Linux o altri sistemi operativi (esempio facile: su Linux se provi ad inserire il classico PAUSE in sh ottieni:
    codice:
    $ pause
    sh: pause: not found
    ).
    Per farla breve: non hai nessuna garanzia su come verrà interpretato il tuo comando.

    Inoltre, non hai nessun codice di ritorno standard che ti dice se il comando è stato eseguito con successo: lo standard non dice niente a proposito, per cui si naviga ancora nell'unspecified behavior.

    Tra l'altro richiamare system per fare queste piccole operazioni è uno spreco anche dal punto di vista delle risorse, dato che vai ad avviare un nuovo processo per fare un'operazione che potresti fare direttamente da dentro il tuo programma, a costo infinitesimo. Oltre al costo del nuovo processo (che nella maggioranza dei casi è molto ridotto) l'avvio di un nuovo processo da parte di un programma sconosciuto è spesso causa di avvertimenti da parte di suite di sicurezza, motivo in più per evitare la system.

    Alcuni poi usano system per avviare altri processi - pessima idea, su cui ho scritto un'altra risposta.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Mi aggancio alla risposta di MItaly per completarla, in modo tale che in futuro posteremo direttamente il link a questa discussione per spiegare l'errato utilizzo di tale instruzione:

    1. come già ampiamente dimostrato da MItaly, non è un'istruzione portabile


    2. spreca risorse di memoria:

    a. sospende il programma
    b. chiama il sistema operativo
    c. apre una shell
    d. il SO deve "trovare" il comando PAUSE
    e. allocazione di memoria per il comando
    f. esecuzione del comando e attesa per la pressione di un tasto
    g. deallocazione della memoria
    h. uscita dalla shell
    i. ritorno al tuo programma


    3. inclusione header stdlib.h o cstdlib probabilmente non necessario al tuo programma


    Ecco 3 buoni motivi per non usare tale istruzione..


    Ciao

  8. #8
    Originariamente inviato da MdE2005
    Mi aggancio alla risposta di MItaly per completarla, in modo tale che in futuro posteremo direttamente il link a questa discussione per spiegare l'errato utilizzo di tale instruzione:
    Ottimo lavoro; ero sempre in difficoltà nel trovare una discussione da linkare in cui si enumerassero in maniera esauriente i motivi per cui system va evitata, ora siamo a posto. Ben fatto.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Utente di HTML.it L'avatar di ShaleN
    Registrato dal
    Aug 2010
    Messaggi
    517
    @mod
    Mi vien da pensare che questa discussione potrebbe essere una buona Pillola.
    Le vie del Signore sono infinite. È la segnaletica che lascia a desiderare.
    La luce viaggia più veloce del suono. Per questo alcune persone sembrano brillanti finchè non parlano.
    Occhio per occhio uguale... occhio al quadrato

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Originariamente inviato da MdE2005
    Ecco 3 buoni motivi per non usare tale istruzione..
    Chissà perché ma devo averli già letti da qualche parte.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.