C++ Ingresso/uscita di base: esempio Cout, Cin, Cerr

โšก Riepilogo intelligente

C++ Le operazioni di input e output si basano su oggetti stream che trasferiscono i dati come sequenze di byte tra programmi e dispositivi, con cin che legge l'input da tastiera e cout, cerr e clog che scrivono l'output sullo schermo.

  • ๐Ÿ”˜ I flussi: Le operazioni di input e output viaggiano come sequenze di byte chiamate stream, trasferendo i dati tra la memoria principale e i dispositivi.
  • ๐Ÿ“ฅ File di intestazione: Le librerie iostream, iomanip e fstream definiscono gli oggetti e i manipolatori utilizzati per l'input e l'output di base.
  • ๐Ÿ–จ๏ธ cout e cin: L'oggetto cout stampa con l'operatore di inserimento, mentre cin legge i valori con l'operatore extracoperatore di zione.
  • โš ๏ธ cerr e clog: Entrambi segnalano errori, tuttavia cerr rimane non bufferizzato per la visualizzazione immediata, mentre clog prima memorizza i messaggi nel buffer.
  • ๏ธ Gestione degli errori: I controlli good, bad, fail e eof leggono lo stato del flusso, in modo che le operazioni fallite vengano intercettate in modo sicuro.
  • ๐Ÿค– Assistenza AI: Gli assistenti di programmazione basati sull'intelligenza artificiale, come GitHub Copilot, generano codice standard per cin e cout a partire da un breve commento o dal nome di una funzione.

C++ Ingresso/Uscita di base

In cosa sono presenti gli stream C++?

C++ fornisce agli utenti una serie di librerie che possono utilizzare per eseguire attivitร  di input/output. Queste attivitร  vengono eseguite sotto forma di sequenze di byte, comunemente chiamate flussi.

I flussi sono divisi in due:

Tipi di flussi

  • Flusso di ingresso: Questo รจ un tipo di flusso in cui i byte fluiscono da un dispositivo come una tastiera alla memoria principale.
  • Flusso di output: Questo รจ un tipo di flusso in cui i byte scorrono nella direzione opposta, cioรจ dalla memoria principale al dispositivo come lo schermo.

Come funzionano gli stream?

C++ i flussi funzionano come segue:

  1. Innanzitutto, un flusso viene inizializzato con il tipo corretto.
  2. Successivamente, รจ necessario specificare dove avverrร  l'I/O utilizzando i puntatori get/put.
  3. Dopo aver raggiunto la posizione corretta in uno stream, puoi eseguire attivitร  di input e output utilizzando rispettivamente gli operatori >> e <<.

Tabella delle funzioni

Di seguito sono riportate le funzioni fornite nel file di intestazione stream.h:

Classefunzioni
FilebuffImposta i buffer dei file su lettura/scrittura. Contiene le funzioni close() e open()
fstreambaseรˆ la classe base per le classi ifstream, fstream e ofstream. Le sue operazioni sono comuni ai flussi di file.
ifstreamรˆ una classe di flusso di file di input per fornire operazioni di input.
di correnteรˆ una classe del flusso di file di output per fornire operazioni di output.
fstreamรˆ una classe di flusso di input/output. Supporta operazioni di input/output simultanee.

C++ File di intestazione per input/output

C++ fornisce tre librerie dotate di funzioni per eseguire attivitร  di input/out di base. Includono:

  • Iostream: รˆ l'acronimo di flusso di input/output standard. Questo file di intestazione contiene le definizioni per oggetti come cin/cout/cerr.
  • Iomanip: รˆ l'acronimo di manipolatori di input/output. La libreria รจ dotata di funzioni che possono essere utilizzate per la manipolazione dei flussi. Contiene definizioni per oggetti come setw, setprecision e altri.
  • Fstream: Questo รจ un file di intestazione per descrivere il flusso di file. Gestisce i dati letti dal file come input o scritti in un file, l'output.

Le parole chiave cin e cout sono molto popolari in C++. Sono utilizzati rispettivamente per prendere input e stampare output. Per usarli, devi includere il file di intestazione iostream nel tuo programma. Il motivo รจ che sono definiti in quel file di intestazione. Il mancato inserimento del file di intestazione iostream genererร  un errore. Ciรฒ deriva da un fallimento da parte del C++ compilatore per comprendere il significato delle parole chiave.

Gli oggetti principali definiti nel file di intestazione iostream sono cin, cout, cerr e clog. Discutiamone.

std::out

L'oggetto cout รจ un'istanza della classe iostream. Viene utilizzato per produrre output su un dispositivo di output standard, che normalmente รจ lo schermo. Viene utilizzato insieme all'operatore di inserimento del flusso (<<).

Esempio

#include <iostream>
using namespace std;
int main() {

	char welcome[] = "Welcome to Guru99";

	cout << welcome << endl;

	return 0;
}

Produzione:

std::out

Ecco uno screenshot del codice:

std::out

Code Spiegazione:

  1. Includere il file di intestazione iostream in cui รจ definito l'oggetto cout.
  2. Includi lo spazio dei nomi std in modo da non doverlo chiamare quando utilizziamo le sue classi.
  3. Chiama la funzione main(). Il codice del programma dovrebbe essere aggiunto all'interno del suo corpo. La parentesi graffa di apertura { segna l'inizio del suo corpo.
  4. Crea una variabile di tipo carattere chiamata welcome per contenere la stringa Benvenuto a Guru99
  5. Stampa il valore della stringa di benvenuto sulla console. La fine รจ a C++ parola chiave che significa fine riga. Sposta il cursore per iniziare a stampare il testo sulla riga successiva.
  6. Il programma deve restituire valore dopo l'esecuzione riuscita.
  7. Fine del corpo della funzione main().

std::cin

L'oggetto cin รจ un'istanza della classe istream. Legge l'input dal dispositivo di input, la tastiera. Viene normalmente utilizzato insieme all'extracoperatore zione (>>). L'extracl'oggetto zione รจ responsabile di extracdati inseriti tramite tastiera dall'oggetto cin.

Esempio

L'esempio seguente mostra come utilizzare la parola chiave cin in C++:

#include <iostream>
using namespace std;
int main()
{
	int number;

	cout << "Enter a number:";
	cin >> number;
	cout << "\nYou entered: " << number;

	return 0;
}

Produzione:

std::cin

Ecco uno screenshot del codice:

std::cin

Code Spiegazione:

  1. Includi il file header iostream nel nostro programma. L'oggetto cin รจ definito in questo file di intestazione.
  2. Includere lo spazio dei nomi std per utilizzare le sue classi. Non dovrai chiamare std quando usi le sue classi.
  3. Chiama la funzione main(). Il codice del programma dovrebbe essere aggiunto all'interno del suo corpo.
  4. L'inizio del corpo del programma.
  5. Dichiara un file variabile intera numero nominato.
  6. Stampa un messaggio sullo schermo chiedendo all'utente di inserire un numero.
  7. Leggere dalla tastiera il valore inserito dall'utente sulla console.
  8. Stampa il valore letto sopra sulla console insieme ad altro testo.
  9. Il programma dovrebbe restituire un valore se viene eseguito correttamente.
  10. Fine del corpo della funzione principale.

std::cerr

L'oggetto cerr costituisce il flusso di errori standard in cui visualizzare gli errori C++. Cerr รจ un'istanza della classe ostream. L'oggetto cerr รจ unbuffered. Ciรฒ significa che viene utilizzato quando un messaggio di errore deve essere visualizzato immediatamente.

Poichรฉ non รจ bufferizzato, non memorizza il messaggio di errore per una visualizzazione successiva. Viene utilizzato insieme all'operatore di inserimento del flusso (<<).

Esempio

#include <iostream>
using namespace std;
int main() {

	cerr << "An Error occurred!";

	return 0;
}

Produzione:

std::cerr

Ecco uno screenshot del codice:

std::cerr

Code Spiegazione:

  1. Include il file di intestazione iostream in cui รจ stato definito l'oggetto cerr.
  2. Includi lo spazio dei nomi std in modo da non doverlo chiamare quando utilizziamo le sue classi.
  3. Chiama la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno del suo corpo. La parentesi graffa di apertura segna l'inizio del corpo della funzione.
  4. Utilizzare l'oggetto cerr per stampare un errore sulla console.
  5. Il programma deve restituire un valore dopo l'esecuzione riuscita.
  6. Fine del corpo della funzione principale.

std::clog

L'oggetto clog รจ un'istanza della classe ostream. Viene utilizzato per mostrare errori sul display standard, il monitor. รˆ simile all'oggetto cerr, ma รจ bufferizzato. Poichรฉ รจ bufferizzato, memorizza il messaggio di errore nel buffer finchรฉ il buffer non viene riempito/svuotato. Viene utilizzato insieme all'operatore di inserimento del flusso (<<).

Esempio

#include <iostream>
using namespace std;
int main() {
	clog << "An Error occurred!";
	return 0;
}

Produzione:

std::clog

Ecco uno screenshot del codice:

std::clog

Code Spiegazione:

  1. Incluso il file header iostream in cui รจ definito l'oggetto clog.
  2. Incluso lo spazio dei nomi std in modo da poter utilizzare le sue classi senza chiamarlo.
  3. Chiamando la funzione main(). La logica del programma dovrebbe essere aggiunta all'interno del suo corpo. Il { segna l'inizio del corpo della funzione.
  4. Utilizzare l'oggetto clog per stampare un errore sull'output standard, il monitor.
  5. Il programma deve restituire un valore in caso di completamento positivo.
  6. La fine del corpo della funzione main().

Gestione degli errori con flussi di IO

Gli stessi oggetti di flusso segnalano anche se un'operazione รจ andata a buon fine, informazione che viene rivelata dai controlli dello stato del flusso.

Per verificare se uno stream รจ valido o meno, puoi usarlo come booleano.

Ecco un esempio:

ifstream file( "myfile.txt" );
if ( ! file )
{
        cout << "File NOT opened!" << endl;
}

Per ottenere maggiori dettagli sullo stato del flusso, puoi utilizzare queste funzioni:

  • good()- restituirร  true se tutto va bene.
  • bad()- restituirร  true se si verifica un errore fatale.
  • fail()- restituirร  true dopo un'operazione di flusso non riuscita.
  • eof()- restituirร  true se raggiunge la fine di un file.

Per sapere se una particolare operazione di lettura/scrittura non รจ riuscita, testare il risultato della lettura.

Ad esempio, per verificare se l'utente ha inserito un numero intero valido, procedi come segue:

int p;
if ( cin >> p ) 
{
        cout << "Enter valid number" << endl;
}

DOMANDE FREQUENTI

L'oggetto cout รจ sicuro dal punto di vista dei tipi e utilizza l'operatore di inserimento, quindi rileva automaticamente il tipo di ciascun valore. La funzione printf del C si basa su specificatori di formato come %d che devono corrispondere manualmente agli argomenti.

L'extracL'operatore tion si ferma al primo spazio, quindi cin legge solo una parola. Per catturare un'intera riga con spazi, chiama getline(cin, variabile), che legge fino al carattere di nuova riga.

Entrambi iniziano una nuova riga, ma endl svuota anche il buffer di output ogni volta, il che puรฒ rallentare i cicli di lavoro intensi. รˆ preferibile un semplice a capo e riservare endl ai casi in cui il buffer deve essere svuotato immediatamente.

Gli oggetti cin, cout, cerr e clog risiedono nello spazio dei nomi std. Scrivere utilizzando lo spazio dei nomi std consente di digitare cout anzichรฉ std::cout. Nei progetti di grandi dimensioni, spesso si mantiene il prefisso std esplicito per evitare conflitti.

Includi l'intestazione iomanip e usa i manipolatori con cout. Il manipolatore setw riserva una larghezza di campo, mentre setprecision imposta il numero di cifre visualizzate, formattando numeri e colonne senza modificare i valori memorizzati.

Sรฌ. Poichรฉ cout e cerr sono flussi separati, una shell puรฒ reindirizzare l'output normale a un file mentre gli errori vengono comunque visualizzati a schermo. Nel codice, rdbuf puรฒ indirizzare un flusso verso un altro buffer.

Sรฌ. Gli assistenti di programmazione basati sull'IA leggono un commento o il nome di una funzione e producono istruzioni cin e cout, oltre all'inclusione di iostream e a un prompt formattato. Revรˆ consigliabile esaminare la logica del flusso generato per i casi limite.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. Copilota GitHub completa la formattazione cout, i cicli di convalida cin e i controlli degli errori cerr mentre digiti. รˆ il 2026 C++ L'intelligenza del codice aggiunge la consapevolezza dei simboli semantici, in modo che i suggerimenti per file multipli rimangano coerenti.

Riassumi questo post con: