logo

Ingresso e uscita di base C++ (I/O)

L'operazione di I/O C++ utilizza il concetto di flusso. La serie di byte o flusso di dati viene definita flusso. Accelera le prestazioni.

Se i byte vengono trasferiti dalla memoria principale a un dispositivo come una stampante, uno schermo, una connessione di rete, ecc., questa viene chiamata operazione di output.

Un'operazione di input si verifica quando i byte fluiscono da un dispositivo come una stampante, uno schermo o una connessione di rete alla memoria principale.

Nel C++, funzioni predefinite e le dichiarazioni vengono fornite tramite file di intestazione, consentendoti di eseguire attività specifiche senza dover scrivere nuovo codice dall'inizio. Alcuni importanti file di intestazione per le operazioni di input/output in C++ includono funzioni per eseguire in modo efficace attività di input e output. La libreria standard C++, una raccolta di classi e metodi creati nel linguaggio di programmazione C++, contiene questi file di intestazione. Parliamo dei principali file di intestazione per le operazioni di input/output:

File di intestazione Funzione e descrizione
È usato per definire il cout, cin e cerr oggetti, che corrispondono rispettivamente al flusso di output standard, al flusso di input standard e al flusso di errori standard.
Viene utilizzato per dichiarare servizi utili per eseguire I/O formattato, come setprecision e setw.
Viene utilizzato per dichiarare servizi per l'elaborazione di file controllata dall'utente.

iostream: È uno dei file di intestazione più importanti per le operazioni di input/output in C++. Sta per 'input Output' flusso. Per lavorare con varie forme di flussi di input/output, il file iostream il file di intestazione include le classi istream (flusso di input) E ostream (flusso di output) così come le sue classi derivate ifstream, ofstream , E stringstream . Le classi più comunemente utilizzate di questo file di intestazione sono cin (ingresso standard) E cout (output standard) , che consentono di leggere l'input dell'utente e visualizzare l'output sulla console. Per esempio:

 #include using namespace std; int main() { int num; cout <> num; cout << 'You entered: ' << num << endl; return 0; } 

Produzione

 Enter a number: 42 You entered: 42 

iomanip: Questo file di intestazione sta per 'manipolazione input-output' . Fornisce strumenti per formattare ingresso E produzione . Ti permette di modificare il allineamento, larghezza, precisione e altre funzionalità di formattazione dell'input e dell'output. Setw, setprecisione, fisso, sinistra, destra e altre funzioni utilizzate regolarmente sono elencate di seguito. È particolarmente utile per presentare i dati in un certo modo.

Esempio:

 #include #include using namespace std; int main() { double pi = 3.14159; cout << fixed << setprecision(2) << 'Value of pi: ' << pi << endl; return 0; } 

Produzione

quanto fa 10 su 60?
 Value of pi: 3.14 

flusso: Viene chiamato il file di intestazione per le operazioni di input/output dei file fstream . Comprende classi per leggere e scrivere su file ifstream (flusso di file di input) E ofstream (flusso di file di output) . Il sistema utilizza queste classi per aprire file di sola lettura e di sola scrittura.

Esempio:

 #include #include using namespace std; int main() { ofstream outputFile('output.txt'); if (outputFile.is_open()) { outputFile << 'Hello, File I/O!'; outputFile.close(); cout << 'File is written successfully.' << endl; } else { cout << 'Failed to open the file.' << endl; } return 0; } 

Produzione

 The file was written successfully. 

Questi file di intestazione sono tra i più cruciali per le attività di input/output C++. Ognuno ha uno scopo specifico e offre gli strumenti necessari per gestire con successo attività che coinvolgono input e output, sia che si interagisca con il console, formattazione dell'output o lavorare con i file.

In C++ usiamo spesso 'utilizzando lo spazio dei nomi std;' dopo i file di intestazione. IL spazio dei nomi std; viene spesso utilizzata in C++ per semplificare il codice quando si lavora con componenti della libreria standard. Esaminiamo la funzione e l'applicazione di questa affermazione in modo più dettagliato:

UN spazio dei nomi è una tecnica per raggruppare identificatori simili (come classi, funzioni , E variabili ) per evitare conflitti di denominazione. La libreria standard C++ fornisce le sue parti (come cin, cout, ecc.) sotto lo spazio dei nomi std.

Il termine 'standard' è abbreviato in 'std' e tutti gli elementi della libreria standard sono contenuti al suo interno. In questo modo si riducono i conflitti di nome con gli identificatori impostati nel codice.

Ora parliamo del perché using namespace std; viene utilizzata l'affermazione:

Senza utilizzare lo spazio dei nomi std:

 #include int main() { std::cout << 'Hello, world!' << std::endl; return 0; } With using namespace std: #include using namespace std; int main() { cout << 'Hello, world!' << endl; return 0; } 

Come puoi vedere, utilizzando il file spazio dei nomi std; l'istruzione consente di omettere il file std:: prefisso quando si accede ai componenti della libreria standard. Rende il tuo codice più breve e più leggibile, poiché non devi ripeterlo standard:: prima di ogni identificatore della libreria standard.

File di intestazione della libreria I/O

Flusso di output standard (cout):

L'oggetto cout è un oggetto predefinito della classe ostream. È collegato al dispositivo di output standard, che solitamente è uno schermo. Il cout viene utilizzato in combinazione con l'operatore di inserimento del flusso (<<) to show the output on a console< p>

Vediamo il semplice esempio di un flusso di output standard (cout):

 #include using namespace std; int main( ) { char ary[] = &apos;Welcome to C++ tutorial&apos;; cout &lt;&lt; &apos;Value of ary is: &apos; &lt;&lt; ary &lt;&lt; endl; } 

Produzione

 Value of ary is: Welcome to C++ tutorial 

Flusso di input standard (cin)

IL mangiare è un oggetto predefinito di flusso classe. È collegato al dispositivo di input standard, che solitamente è una tastiera. Il cin viene utilizzato insieme all'operatore di estrazione del flusso (>>) per leggere l'input da una console.

Vediamo il semplice esempio di flusso di input standard (cin):

 #include using namespace std; int main( ) { int age; cout &lt;&gt; age; cout &lt;&lt; &apos;Your age is: &apos; &lt;&lt; age &lt;&lt; endl; } 

Produzione

 Enter your age: 22 Your age is: 22 

Fine linea standard (endl)

IL fine è un oggetto predefinito di nostro nemico classe. Viene utilizzato per inserire caratteri di nuova riga e svuotare il flusso.

Vediamo il semplice esempio di end line standard (endl):

 #include using namespace std; int main( ) { cout &lt;&lt; &apos;C++ Tutorial&apos;; cout &lt;&lt; &apos; Javatpoint&apos;&lt;<endl; cout << 'end of line'<<endl; } < pre> <p> <strong>Output</strong> </p> <pre> C++ Tutorial Javatpoint End of line </pre> <h3>Un-buffered standard error stream (cerr):</h3> <p> <strong> <em>cerr</em> </strong> stands for <strong> <em>&apos;standard error&apos;</em> .</strong> </p> <p>It is an unbuffered stream, meaning that output sent to <strong> <em>cerr</em> </strong> is immediately displayed on the console without buffering.</p> <p>It is typically used for displaying error messages and diagnostic information, which need to be displayed immediately to avoid delays caused by buffering.</p> <p> <strong>Example: using cerr:</strong> </p> <pre> #include int main() { std::cerr &lt;&lt; &apos;This is an error message.&apos; &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an error message. </pre> <h3>buffered standard error stream (clog):</h3> <p>clog stands for <strong> <em>&apos;standard log&apos;</em> </strong> . It is a buffered stream, similar to cout. It&apos;s often used for writing informational or diagnostic messages that are less time-sensitive than errors. The use of buffering can improve performance when displaying a large number of messages.</p> <p> <strong>Example: using clog</strong> </p> <pre> #include int main() { std::clog &lt;&lt; &apos;This is an informational message.&apos; &lt;&lt; std::endl; return 0; } </pre> <p> <strong>Output</strong> </p> <pre> This is an informational message. </pre> <p>In both examples, the output will appear on the console. However, the main difference between <strong> <em>cerr</em> </strong> and <strong> <em>clog</em> </strong> lies in their buffering behavior. Due to its unbuffered nature, messages given to <strong> <em>cerr</em> </strong> are displayed right away, but messages sent to clog may be buffered for greater speed. However, they will still eventually appear on the console.</p> <h4>Note: It is important to remember that the type of message you wish to display will determine whether you use cerr or clog. Use cerr for essential messages that need immediate attention (like error messages) and use clog for less critical diagnostic or informational messages that can be buffered for better performance.</h4> <hr></endl;>

Flusso di errori standard senza buffer (cerr):

cerr sta per 'errore standard' .

È un flusso senza buffer, ovvero l'output inviato a cerr viene immediatamente visualizzato sulla console senza buffering.

Viene generalmente utilizzato per visualizzare messaggi di errore e informazioni diagnostiche, che devono essere visualizzate immediatamente per evitare ritardi causati dal buffering.

Esempio: utilizzando cerr:

 #include int main() { std::cerr &lt;&lt; &apos;This is an error message.&apos; &lt;&lt; std::endl; return 0; } 

Produzione

 This is an error message. 

flusso di errori standard bufferizzato (intasamento):

zoccolo sta per 'registro standard' . È un flusso bufferizzato, simile a cout. Viene spesso utilizzato per scrivere messaggi informativi o diagnostici meno sensibili al fattore tempo rispetto agli errori. L'utilizzo del buffering può migliorare le prestazioni durante la visualizzazione di un numero elevato di messaggi.

Esempio: usare clog

 #include int main() { std::clog &lt;&lt; &apos;This is an informational message.&apos; &lt;&lt; std::endl; return 0; } 

Produzione

 This is an informational message. 

In entrambi gli esempi, l'output apparirà sulla console. Tuttavia, la differenza principale tra cerr E intasare risiede nel loro comportamento buffering. A causa della sua natura senza buffer, i messaggi forniti a cerr vengono visualizzati immediatamente, ma i messaggi inviati a clog possono essere memorizzati nel buffer per una maggiore velocità. Tuttavia, alla fine appariranno comunque sulla console.

Nota: è importante ricordare che il tipo di messaggio che desideri visualizzare determinerà se utilizzerai cerr o clog. Utilizza cerr per messaggi essenziali che richiedono attenzione immediata (come i messaggi di errore) e utilizza clog per messaggi diagnostici o informativi meno critici che possono essere memorizzati nel buffer per prestazioni migliori.