formatting i o printf
Questo tutorial discute l'uso e gli esempi di funzioni come printf, sprintf, scanf utilizzate per la formattazione di input / output in C ++:
Nelle nostre precedenti esercitazioni C ++, abbiamo visto che possiamo eseguire operazioni di input-output in C ++ usando cin / cout.
Oltre a utilizzare questi costrutti, possiamo anche fare uso della libreria C. Utilizzando la libreria di input e output standard C (cstdio, equivalente in C ++ per l'intestazione stdio.h in linguaggio C), eseguiamo operazioni di I / O utilizzando 'flussi' che operano con dispositivi fisici come tastiere (input standard), stampanti, terminali (output standard ) o qualsiasi altro tipo di file supportato dal sistema operativo.
=> Controlla qui i tutorial di formazione approfonditi su C ++.
I flussi non sono altro che un'entità astratta che viene utilizzata per interagire con i dispositivi fisici in modo uniforme. Tutti i flussi hanno caratteristiche simili e sono indipendenti dai dispositivi multimediali fisici.
Nei prossimi argomenti di questo tutorial, impareremo in dettaglio alcune funzioni, ad esempio printf, sprint e scanf.
Cosa imparerai:
- C ++ printf
- C ++ sprintf
- C ++ scanf
- scanf / printf vs. cin / cout In C ++
- Domande frequenti
- Conclusione
C ++ printf
La funzione printf in C ++ viene utilizzata per scrivere l'output formattato in stdout.
Prototipo di funzione:
int printf (const char * formato,…);
Parametri:
formato => Puntatore a una stringa con terminazione null scritta nel flusso di file. Consiste di caratteri insieme a un identificatore di formato opzionale che inizia con%. L'identificatore di formato viene sostituito da valori appropriati che seguono la stringa di formato.
… => Altri argomenti aggiuntivi che specificano i dati da stampare nell'ordine in cui è specificato il formato.
Valore di ritorno:
qual è la migliore app per scaricare i video di YouTube
Successo => printf restituisce il numero di caratteri restituiti.
Fallimento => Valore negativo
Descrizione:
La funzione printf è definita nell'intestazione. Le funzioni printf scrivono la stringa puntata dal puntatore “format” allo standard output stdout. La stringa di formato può contenere identificatori di formato che vengono poi sostituiti dalle variabili passate alla funzione printf come argomenti aggiuntivi (dopo la stringa di formato).
Identificatore di formato utilizzato nella funzione printf ()
Una forma generale di specificatore di formato è
%(flags)(width)(.precision)(length)specifier
Di seguito è riportata una descrizione di ciascuna delle parti dell'identificatore di formato:
- % cartello: Questo è un segno% iniziale
- Bandiere: Possono avere i seguenti valori:
- -: Sinistra giustifica il risultato all'interno del campo. Per impostazione predefinita, giustificato a destra.
- +: Il segno del risultato allegato all'inizio del valore inclusi i risultati positivi.
- Spazio: in assenza di un segno, lo spazio viene aggiunto all'inizio del risultato.
- #: Specifica una forma alternativa di conversione.
- 0: utilizzato per numeri interi e in virgola mobile. Agiscono come zeri iniziali in assenza di spazio.
- Larghezza: Specifica la larghezza minima del campo sotto forma di * o un valore intero. Questo è opzionale.
- Precisione: Specifica la precisione con un '.' Seguito da un * o un numero intero o niente. Anche questo è opzionale.
- Lunghezza: L'argomento facoltativo che ha specificato la dimensione dell'argomento.
- Specificatore: Questo è un identificatore del formato di conversione.
Vari specificatori di formato utilizzati in C ++ sono i seguenti:
Non | Specifier | Descrizione |
---|---|---|
7 | u | Converte un intero senza segno in una rappresentazione decimale. |
1 | % | Stampa un%. |
Due | c | Stampa un singolo carattere. |
3 | S | Stampa una stringa. |
4 | d / i | Converte un intero con segno in una rappresentazione decimale. |
5 | o | Converte un intero senza segno in una rappresentazione ottale. |
6 | x / X | Converte un intero senza segno in una rappresentazione esadecimale. |
8 | f / F | Converte un numero a virgola mobile in una rappresentazione decimale. |
9 | e/E | Converte un numero a virgola mobile in notazione esponente decimale. |
10 | aa | Converte un numero a virgola mobile in un esponente esadecimale. |
undici | g / G | Converte un numero a virgola mobile in notazione esponente decimale o decimale. |
12 | n | Numero di caratteri scritti finora da questa chiamata di funzione. |
13 | p | Un puntatore che punta alla sequenza di caratteri definita dall'implementazione. |
Di seguito è riportato un esempio completo di programmazione C ++ che dimostra la funzione printf discussa sopra.
C ++ printf Esempio
#include //C++ printf example int main() { char ch = 'A'; float a = 8.0, b = 3.0; double d = 3.142; int x = 20; printf('float division : %.3f / %.3f = %.3f
', a,b,a/b); printf('Double value: %.4f
', d); printf('Setting width %*c
',4,ch); printf('Octal equivalent of %d is %o
',x,x); printf('Hex equivalent of %d is %x
',x,x); return 0; }
Produzione:
Il programma precedente usa varie chiamate alla funzione printf e notiamo che ogni chiamata a printf usa vari specificatori di formato di cui abbiamo discusso sopra. L'identificatore di formato% .3f indica un valore float con un massimo di 3 cifre decimali. Il resto delle chiamate printf visualizzano i valori carattere, decimale, ottale e esadecimale.
C ++ sprintf
Funzione Sprintf in C ++ simile alla funzione printf tranne con una differenza. Invece di scrivere l'output sullo standard output stdout, sprintf scrive l'output in un buffer di stringhe di caratteri.
Prototipo di funzione:
int sprintf (char * buffer, const char * format, ...)
Parametri:
buffer => Puntatore a un buffer di stringa in cui scrivere il risultato.
Formato => Puntatore a una stringa con terminazione null scritta nel flusso di file.
Nota: la stringa di formato utilizzata nella funzione sprintf è la stessa di quella discussa come parte della descrizione della funzione printf.
… => Altri argomenti aggiuntivi che specificano i dati da stampare nell'ordine in cui è specificato il formato.
Valore di ritorno:
successo => Restituisce il numero di caratteri scritti nel buffer sufficientemente grande escluso il carattere null di terminazione.
Fallimento => Viene restituito un valore negativo.
Descrizione:
La funzione Sprintf è definita nell'intestazione. La funzione sprintf viene utilizzata per scrivere una stringa puntata dal formato nel buffer delle stringhe. Il formato della stringa può contenere identificatori di formato che iniziano con% che vengono sostituiti dai valori delle variabili che vengono passati alla funzione sprintf () come argomenti aggiuntivi.
Vediamo un esempio di programma C ++ che mostra l'utilizzo della funzione sprintf.
sprintf Esempio
#include #include using namespace std; int main() { char mybuf(100); int retVal; char name() = 'Software Testing Help'; char topic() = 'C++ tutorials'; retVal = sprintf(mybuf, 'Hi, this is %s and you are reading %s !!', name, topic); cout << mybuf << endl; cout << 'Number of characters written = ' << retVal << endl; return 0; }
Produzione:
Nell'esempio sopra, per prima cosa, scriviamo una stringa formattata in un buffer di caratteri mybuf usando la funzione sprintf. Quindi visualizziamo la stringa su stdout usando cout. Infine, mostriamo il numero di caratteri scritti nel buffer mybuf.
C ++ scanf
La funzione scanf in C ++ legge i dati di input dallo standard input stdin.
Prototipo di funzione:
int scanf (const char * formato, ...)
Parametri:
formato => Puntatore a una stringa con terminazione null che definisce come leggere l'input. Questa stringa di formato è costituita da identificatori di formato.
… => Argomenti aggiuntivi che ricevono input di dati. Questi argomenti aggiuntivi sono in sequenza in base all'identificatore di formato.
Valore di ritorno:
successo => Restituisce un numero di caratteri letti.
matchingFailure => Restituisce zero se si verifica un errore di corrispondenza prima che venga assegnato il primo argomento ricevente.
errore di input => Restituisce EOF se si verifica un errore di input prima che venga assegnato il primo argomento ricevente.
Descrizione:
La funzione Scanf () è definita nell'intestazione. Questa funzione legge i dati da stdin e li memorizza nelle variabili fornite.
Identificatore di formato utilizzato nella funzione scanf ()
Il formato generale per la stringa del formato della funzione scanf () è:
%(*)(width)(length)specifier
Pertanto, l'identificatore di formato ha le seguenti parti:
- Carattere senza spazi: Questi sono i caratteri tranne% che consumano un carattere identico dal flusso di input.
- Carattere spazio bianco: Tutti i caratteri di spazio bianco consecutivi sono considerati come un carattere di spazio vuoto. Lo stesso vale anche per le sequenze di escape.
- Specifiche di conversione: Ha il seguente formato:
- %: Carattere che specifica l'inizio.
- *: Chiamato carattere soppressore di incarico. Se presente, lo scanf non assegna il risultato ad alcun parametro di ricezione. Questo parametro è facoltativo.
- Larghezza campo: Parametro facoltativo (un numero intero positivo) che specifica una larghezza massima del campo.
- Lunghezza: Specifica la dimensione della ricezione di un argomento.
L'identificatore del formato di conversione può essere il seguente:
Non | Identificatore di formato | Descrizione |
---|---|---|
7 | x / X | Corrisponde a un numero intero esadecimale senza segno. |
1 | % | Corrisponde alla% letterale. |
Due | c | Corrisponde a uno o più caratteri fino alla larghezza. |
3 | S | Corrisponde alla sequenza di caratteri diversi da spazi fino alla larghezza specificata o al primo spazio vuoto. |
4 | d | Corrisponde ai decimali. |
5 | io | Corrisponde a un numero intero. |
6 | o | Corrisponde all'intero ottale senza segno. |
8 | u | Corrisponde a un numero intero decimale senza segno. |
9 | a / A, e / E, f / F, g / G | Corrisponde al numero in virgola mobile. |
10 | (impostato) | Corrisponde a una sequenza di caratteri non vuota del set specificato. Se preceduto da ^, i caratteri non nel set vengono trovati. |
12 | n | Restituisce il numero di caratteri letti fino a quel momento. |
13 | p | Puntatore alla sequenza di caratteri specifica dell'implementazione. |
Successivamente, implementeremo un programma di esempio per dimostrare l'utilizzo della funzione scanf in C ++
scanf Esempio
#include int main () { char str (80), pos_str(80); int i; printf ('Enter your company name: '); scanf ('%79s',str); printf ('Enter your position: '); scanf ('%s',pos_str); printf ('You work at %s as %s.
',str,pos_str); printf ('Enter a hexadecimal number: '); scanf ('%x',&i); printf ('You have entered %#x (%d).
',i,i); return 0; }
Produzione:
Nel programma sopra, leggiamo due stringhe di input e un numero esadecimale. Quindi uniamo le due stringhe e visualizziamo la stringa risultante. Il numero viene convertito in decimale e visualizzato.
scanf / printf vs. cin / cout In C ++
scanf / printf | cin / cost |
---|---|
Input-output standard in linguaggio C. | Input-output standard in linguaggio C ++. |
Definito in 'stdio.h'. | Definito in 'iostream'. |
scanf e printf sono una funzione utilizzata per l'I / O. | cin e cout sono oggetti stream. |
La stringa di formato viene utilizzata per formattare l'input e l'output. | Operatori >> e<< are overloaded and used along with cin and cout respectively. Non viene utilizzata alcuna stringa di formato. |
Specifichiamo il tipo di dati utilizzando il segnaposto. | Non è necessario specificare il tipo di dati. |
Domande frequenti
D # 1) Puoi usare printf in C ++?
Risposta: Sì. Printf può essere utilizzato in C ++. Per utilizzare questa funzione in un programma C ++, dobbiamo includere l'intestazione nel programma.
D # 2) Quale lingua usa printf?
Risposta: Printf è la funzione di output standard in linguaggio C. Può anche essere utilizzato in linguaggio C ++ includendo l'intestazione nel programma C ++.
D # 3) Cos'è% d nella programmazione C?
Risposta: Il valore% d nella funzione printf si riferisce a un valore intero.
Q # 4) Perché & viene utilizzato in Scanf?
Risposta: L'operatore & viene utilizzato per accedere alla posizione di memoria. È una scorciatoia passare un puntatore alla variabile invece di passarlo esplicitamente.
D # 5) Qual è la differenza tra printf () e sprintf ()?
Risposta: Entrambe le funzioni printf () e sprintf () sono uguali tranne per una differenza. Mentre printf () scrive l'output su stdout (standard output), sprintf scrive l'output in un buffer di stringhe di caratteri.
Q # 6) Sprintf null termina?
Risposta: sprintf restituisce il numero di caratteri memorizzati nella matrice di stringhe di caratteri escluso il carattere di terminazione null.
Q # 7) Perché sprintf non è sicuro?
Risposta: La funzione Sprintf non controlla la lunghezza del buffer di destinazione. Pertanto, quando la lunghezza della stringa di formato è troppo lunga, la funzione potrebbe causare l'overflow del buffer di destinazione. Ciò può portare a instabilità dell'applicazione e problemi di sicurezza, rendendo così non sicura la funzione sprintf.
Conclusione
In questo tutorial, abbiamo appreso le funzioni di input-output della libreria C: printf, sprintf e scanf che possono essere utilizzate in C ++ includendo l'intestazione che è l'equivalente dell'intestazione C.
Come già discusso, le funzioni input-output utilizzano specificatori di formato e segnaposto e abbiamo bisogno di specificare i tipi di dati delle variabili in cui i dati vengono letti o scritti.
Contrariamente a ciò, gli oggetti di streaming utilizzati in C ++ - cin e cout non utilizzano alcun identificatore di formato o segnaposto. Usano overload >> e<< operators to read in and write the data.
=> Dai un'occhiata alla guida di formazione Perfect C ++ qui.