2009-09-04 64 views
17

Sto cercando di tenere premuto lo schermo sul mio output utilizzando il file di intestazione <iostream.h>, ma non so alcuna funzione equivalente alle getch() & clrscr() funzioni di <conio.h> in <iostream.h> o di qualsiasi altra libreria C++. Ci sono tali funzioni?Funzione alternativa in iostream.h per getch() di conio.h?

+5

In C++, l'intestazione è semplicemente '' #include , ** non ** '' #include GManNickG

+0

'' può essere la norma ma 'clrscr()' non è standard, quindi effettivamente senso per trovarlo in un'intestazione non standard. – MSalters

+0

In realtà mi sono sempre chiesto e volevo chiedere perché alcune persone inizino sempre un programma con clrscr() e finiscano con getch() in primo luogo. – UncleBens

risposta

-18

se si lavora su Windows è possibile utilizzare il sistema ("pausa"), questo vi darà il messaggio "premere un tasto qualsiasi per continuare".

+15

Funziona, ma è una [cattiva abitudine di entrare] (http://www.cplusplus.com/forum/articles/11153/). – dwurf

+2

Non dovrebbe nemmeno usarlo affatto. – CLearner

+3

C'è anche un 'std :: cin.ignore();' per questo. –

6

getch() e clrscr() funzionano con C++. Includere conio.h

Tuttavia, se non è possibile (per qualche motivo) comprendono conio.h,

come circa cin >> dummy_var con un messaggio sul display chiede all'utente di premere invio?

+0

-1, perché conio.h non fa parte dello standard C. –

+4

+1 perché le cose più interessanti che puoi fare con C e C++ non sono in realtà nello standard. Nessuno dei due standard è concepito per essere completo e il fatto che sia possibile includere intestazioni diverse da quelle standard è molto vicino alla progettazione. – MSalters

24

Le funzioni conio.h sono estensioni del compilatore alla lingua, non parte di C o C++. Non esiste una sostituzione diretta in C++ standard.

Per getch(), int ch = std::cin.get(); è probabilmente l'equivalente più simile, ma tenere presente che questo verrà letto dallo standard input bufferizzato, mentre penso che il conio.h getch effettui una lettura senza buffer.

Qualsiasi implementazione di clrscr() dipenderà molto dalla piattaforma: non tutti gli schermi oi terminali hanno una nozione di compensazione e quelli che hanno modi molto diversi per accedere a tale funzionalità.

Se è necessario considerare il terminale come qualcosa di diverso da un insieme di flussi di caratteri, la soluzione migliore è probabilmente cercare una libreria che nasconda i dettagli del terminale, dello schermo o della console sottostante. Se sei su un sistema UNIX, guarda la libreria curses o ncurses; Non conosco alcun suggerimento per altri sistemi operativi.

-5

È possibile utilizzare il sistema ("pausa"), che produce il messaggio "premere un tasto qualsiasi per continuare". Ma funziona solo nell'ambiente Windows. Penso che tutti i comandi "sistema" siano comandi DOS. Correggetemi se sbaglio

+1

Sei a metà strada. 'system ()' esegue '' usando l'elaboratore dei comandi di qualunque sistema operativo si sta attualmente. [Riferimento] (http://www.cplusplus.com/reference/clibrary/cstdlib/system/0). Inoltre è generalmente considerato una cattiva forma perché non è portabile tra le piattaforme. – dwurf

+1

@Kokizzu: 'pausa: comando non trovato' –

3

Basta utilizzare queste due funzioni:

fflush(stdin); 
getchar(); 

Visual Studio e Dev C++ includere questo nella sua intestazione iostream quindi nessun bisogno di includere file di intestazione in più.

+4

http://stackoverflow.com/a/257203/183120 ' fflush (stdin) 'è un comportamento indefinito richiamato nello standard C 7.18.5.2/2. – legends2k

1

risposta tardiva, è possibile utilizzare std::cin.get(), questo dovrebbe funzionare con la maggior parte dei compilatori. Se ciò non funziona, prova ad aggiungerne un altro.

int main() { 

    // ... 

    std::cin.get(); 
    std::cin.get(); 
    return 0x00; 
} 

Utilizzando system("PAUSE") è disponibile solo su Windows ed è un bad programmazione habit. La ragione di questo è letteralmente le pause o blocca il tuo programma anziché aspettare solo un input. vale a dire. un tasto premuto per uscire.

3

Questo è quello che io di solito uso:

#include<iostream> 
... 
std::getchar(); 
1

Mi rendo conto che questa è una vecchia questione, ma ho intenzione di rispondere comunque perché le persone possono essere alla ricerca di una risposta a una domanda simile.

conio.h è una (antica) libreria di Windows e MS-DOS/PC-DOS C che era, ed è ancora utilizzata per l'input e la gestione della tastiera in metallo semplice, in ambiente Windows/DOS.

Entrambe getch() e clrscr() sono aggiunte non standard da questa intestazione e dovrebbero essere evitate quando possibile per le funzioni C standard. getch() di solito può essere sostituito con scanf(), fread(), in C e std::cin e std::cin.get in C++. Per quanto riguarda clrscr(), il più vicino si può ottenere è:

for(int i = 0; i < 100; i++) 
{ 
    printf("\n"); 
} 

O:

C'è anche ncurses.h sugli ambienti * nix. Here's a link per alcune informazioni su questo.

Problemi correlati