formatting i o printf
Ce didacticiel traite de l'utilisation et des exemples de fonctions telles que printf, sprintf, scanf qui sont utilisées pour formater les entrées / sorties en C ++:
Dans nos précédents didacticiels C ++, nous avons vu que nous pouvons effectuer des opérations d'entrée-sortie en C ++ en utilisant cin / cout.
Outre l'utilisation de ces constructions, nous pouvons également utiliser la bibliothèque C. À l'aide de la bibliothèque d'entrée et de sortie standard C (cstdio, équivalent C ++ pour l'en-tête stdio.h en langage C), nous effectuons des opérations d'E / S à l'aide de «flux» qui fonctionnent avec des périphériques physiques tels que des claviers (entrée standard), des imprimantes, des terminaux (sortie standard ) ou tout autre type de fichier pris en charge par le système d'exploitation.
=> Consultez les didacticiels de formation approfondie C ++ ici.
Les flux ne sont rien d'autre qu'une entité abstraite utilisée pour interagir avec des périphériques physiques de manière uniforme. Tous les flux ont des caractéristiques similaires et sont indépendants des périphériques multimédias physiques.
Dans nos prochains sujets de ce didacticiel, nous apprendrons en détail quelques fonctions, à savoir printf, sprint et scanf.
Ce que vous apprendrez:
- C ++ printf
- Sprintf C ++
- Scanf C ++
- scanf / printf Vs. cin / cout en C ++
- Questions fréquemment posées
- Conclusion
C ++ printf
La fonction printf en C ++ est utilisée pour écrire la sortie formatée sur stdout.
Prototype de fonction:
int printf (format const char *,…);
Paramètres:
format => Un pointeur vers une chaîne terminée par null écrit dans le flux de fichiers. Il se compose de caractères avec un spécificateur de format facultatif commençant par%. Le spécificateur de format est remplacé par les valeurs appropriées qui suivent la chaîne de format.
… => Autres arguments supplémentaires qui spécifient les données à imprimer dans l'ordre dans lequel le format est spécifié.
Valeur de retour:
Questions d'entretien pl sql pour 3 ans d'expérience
Succès => printf renvoie le nombre de caractères renvoyés.
Échec => Valeur négative
La description:
La fonction printf est définie dans l'en-tête. Les fonctions printf écrivent la chaîne pointée par le pointeur «format» vers la sortie standard stdout. La chaîne de format peut contenir des spécificateurs de format qui sont ensuite remplacés par les variables passées à la fonction printf comme arguments supplémentaires (après la chaîne de format).
Spécificateur de format utilisé dans la fonction printf ()
Une forme générale de spécificateur de format est
%(flags)(width)(.precision)(length)specifier
Vous trouverez ci-dessous une description de chacune des parties du spécificateur de format:
- % signe: C'est un signe% principal
- Drapeaux: Ils peuvent avoir les valeurs suivantes:
- -: La gauche justifie le résultat dans le champ. Par défaut, justifié à droite.
- +: Le signe du résultat attaché au début de la valeur incluant les résultats positifs.
- Espace: en l'absence de signe, un espace est attaché au début du résultat.
- #: Spécifiez une autre forme de conversion.
- 0: utilisé pour les nombres entiers et flottants. Agit comme des zéros non significatifs en l'absence d'espace.
- Largeur: Spécifie la largeur minimale du champ sous la forme d'une * ou d'une valeur entière. Ceci est facultatif.
- Précision: Spécifie la précision avec un '.' Suivi d'un * ou d'un entier ou rien. Ceci est également facultatif.
- Longueur: L'argument facultatif qui spécifie la taille de l'argument.
- Prescripteur: Il s'agit d'un spécificateur de format de conversion.
Les divers spécificateurs de format utilisés en C ++ sont les suivants:
Ne pas | Prescripteur | Description |
---|---|---|
sept | u | Convertit un entier non signé en représentation décimale. |
1 | % | Imprime un%. |
deux | c | Imprime un seul caractère. |
3 | s | Imprime une chaîne. |
4 | d / i | Convertit un entier signé en représentation décimale. |
5 | ou | Convertit un entier non signé en représentation octale. |
6 | x / X | Convertit un entier non signé en représentation hexadécimale. |
8 | f / F | Convertit un nombre à virgule flottante en représentation décimale. |
9 | et / E | Convertit un nombre à virgule flottante en notation d'exposant décimal. |
dix | a / A | Convertit un nombre à virgule flottante en exposant hexadécimal. |
Onze | g / G | Convertit un nombre à virgule flottante en notation décimale ou décimale d'exposant. |
12 | n | Nombre de caractères écrits jusqu'à présent par cet appel de fonction. |
13 | p | Un pointeur pointant sur la séquence de caractères définie par l'implémentation. |
Vous trouverez ci-dessous un exemple de programmation C ++ complet qui illustre la fonction printf décrite ci-dessus.
Exemple de printf C ++
#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; }
Production:
Le programme ci-dessus utilise divers appels à la fonction printf et nous notons que chaque appel à printf utilise divers spécificateurs de format dont nous avons discuté ci-dessus. Le spécificateur de format% .3f indique une valeur flottante avec jusqu'à 3 décimales. Le reste des appels printf affiche les valeurs de caractère, décimales, octales et hexadécimales.
Sprintf C ++
Fonction Sprintf en C ++ similaire à la fonction printf sauf avec une différence. Au lieu d'écrire la sortie dans la sortie standard stdout, sprintf écrit la sortie dans un tampon de chaîne de caractères.
Prototype de fonction:
int sprintf (char * buffer, const char * format,…)
Paramètres:
tampon => Pointeur vers un tampon de chaîne dans lequel le résultat doit être écrit.
Format => Pointeur vers une chaîne terminée par un zéro qui est écrite dans le flux de fichiers.
Remarque: La chaîne de format utilisée dans la fonction sprintf est la même que celle décrite dans la description de la fonction printf.
… => Autres arguments supplémentaires qui spécifient les données à imprimer dans l'ordre dans lequel le format est spécifié.
Valeur de retour:
succès => Renvoie le nombre de caractères écrits dans la mémoire tampon suffisamment grande à l'exclusion du caractère nul de fin.
Échec => Une valeur négative est renvoyée.
La description:
La fonction Sprintf est définie dans l'en-tête. La fonction sprintf est utilisée pour écrire une chaîne pointée par le format vers le tampon de chaîne. Le format de chaîne peut contenir des spécificateurs de format commençant par% qui sont remplacés par les valeurs des variables qui sont passées à la fonction sprintf () comme arguments supplémentaires.
Voyons un exemple de programme C ++ qui montre l'utilisation de la fonction sprintf.
Exemple de sprintf
#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; }
Production:
Dans l'exemple ci-dessus, nous écrivons d'abord une chaîne formatée dans un tampon de caractères mybuf à l'aide de la fonction sprintf. Ensuite, nous affichons la chaîne à stdout en utilisant cout. Enfin, nous affichons le nombre de caractères écrits dans le tampon mybuf.
Scanf C ++
La fonction scanf en C ++ lit les données d'entrée à partir de l'entrée standard stdin.
Prototype de fonction:
int scanf (format const char *,…)
Paramètres:
format => Pointeur vers une chaîne terminée par un zéro qui définit comment lire l'entrée. Cette chaîne de format se compose de spécificateurs de format.
… => Arguments supplémentaires recevant l'entrée de données. Ces arguments supplémentaires sont en séquence selon le spécificateur de format.
Valeur de retour:
succès => Renvoie un nombre de caractères lus.
matchingFailure => Renvoie zéro si la correspondance échoue avant que le premier argument de réception ne soit affecté.
Échec d'entrée => Renvoie EOF si un échec d'entrée se produit avant que le premier argument de réception ne soit affecté.
La description:
La fonction Scanf () est définie dans l'en-tête. Cette fonction lit les données de stdin et les stocke dans les variables fournies.
Spécificateur de format utilisé dans la fonction scanf ()
Le format général de la chaîne de format de la fonction scanf () est:
%(*)(width)(length)specifier
Ainsi, le spécificateur de format comprend les parties suivantes:
- Caractère non blanc: Ce sont les caractères sauf% qui consomment un caractère identique du flux d'entrée.
- Caractère d'espace blanc: Tous les caractères d'espace blanc consécutifs sont considérés comme un seul caractère d'espace blanc. Il en va de même pour les séquences d'échappement.
- Spécification de conversion: Il a le format suivant:
- %: Caractère qui spécifie le début.
- *: Caractère de suppression d'affectation appelé. S'il est présent, le scanf n'affecte le résultat à aucun paramètre de réception. Ce paramètre est facultatif.
- Largeur du champ: Paramètre facultatif (un entier positif) qui spécifie une largeur de champ maximale.
- Longueur: Spécifie la taille de réception d'un argument.
Le spécificateur de format de conversion peut être comme suit:
Ne pas | Spécificateur de format | Description |
---|---|---|
sept | x / X | Correspond à un entier hexadécimal non signé. |
1 | % | Correspond au% littéral. |
deux | c | Correspond à un ou plusieurs caractères jusqu'à la largeur. |
3 | s | Correspond à la séquence de caractères non blancs jusqu'à la largeur spécifiée ou au premier espace blanc. |
4 | ré | Correspond à la décimale. |
5 | je | Correspond à un entier. |
6 | ou | Correspond à un entier octal non signé. |
8 | u | Correspond à un entier décimal non signé. |
9 | a / A, e / E, f / F, g / G | Correspond à un nombre à virgule flottante. |
dix | (ensemble) | Correspond à une séquence de caractères non .empty de l'ensemble donné. Si précédé de ^, les caractères non définis sont mis en correspondance. |
12 | n | Renvoie le nombre de caractères lus jusqu'à présent. |
13 | p | Pointeur vers une séquence de caractères spécifique à l'implémentation. |
Ensuite, nous allons implémenter un exemple de programme pour démontrer l'utilisation de la fonction scanf en C ++
Exemple de scanf
#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; }
Production:
Dans le programme ci-dessus, nous lisons deux chaînes d'entrée et un nombre hexadécimal. Ensuite, nous combinons les deux chaînes et affichons la chaîne résultante. Le nombre est converti en décimal et affiché.
scanf / printf Vs. cin / cout en C ++
scanf / printf | cin/cout |
---|---|
Entrée-sortie standard en langage C. | Entrée-sortie standard en langage C ++. |
Défini dans 'stdio.h'. | Défini dans «iostream». |
scanf et printf sont une fonction utilisée pour les E / S. | cin et cout sont des objets de flux. |
La chaîne de format est utilisée pour formater l'entrée et la sortie. | Opérateurs >> et<< are overloaded and used along with cin and cout respectively. Aucune chaîne de format n'est utilisée. |
Nous spécifions le type de données à l'aide de l'espace réservé. | Pas besoin de spécifier le type de données. |
Questions fréquemment posées
Q # 1) Pouvez-vous utiliser printf en C ++?
Répondre: Oui. Printf peut être utilisé en C ++. Pour utiliser cette fonction dans un programme C ++, nous devons inclure l'en-tête dans le programme.
Q # 2) Quelle langue utilise printf?
Répondre: Printf est la fonction de sortie standard en langage C. Il peut également être utilisé en langage C ++ en incluant l'en-tête dans le programme C ++.
Q # 3) Qu'est-ce que% d dans la programmation C?
Répondre: La valeur% d dans la fonction printf fait référence à une valeur entière.
Q # 4) Pourquoi et est-il utilisé dans Scanf?
Répondre: L'opérateur & est utilisé pour accéder à l'emplacement mémoire. C'est un raccourci pour passer un pointeur vers la variable au lieu de le passer explicitement.
Q # 5) Quelle est la différence entre printf () et sprintf ()?
Répondre: Les fonctions printf () et sprintf () sont identiques à une différence près. Alors que printf () écrit la sortie dans stdout (sortie standard), le sprintf écrit la sortie dans un tampon de chaîne de caractères.
Q # 6) Est-ce que Sprintf null se termine?
Répondre: sprintf renvoie le nombre de caractères stockés dans le tableau de chaînes de caractères à l'exclusion du caractère de fin nul.
Q # 7) Pourquoi sprintf est-il dangereux?
Répondre: La fonction Sprintf ne vérifie pas la longueur du tampon de destination. Par conséquent, lorsque la longueur de la chaîne de format est trop longue, la fonction peut provoquer le débordement du tampon de destination. Cela peut entraîner une instabilité de l'application et des problèmes de sécurité, rendant ainsi la fonction sprintf dangereuse.
Conclusion
Dans ce didacticiel, nous avons appris les fonctions d'entrée-sortie de la bibliothèque C - printf, sprintf et scanf qui peuvent être utilisées en C ++ en incluant l'en-tête qui est l'équivalent de l'en-tête C.
Comme déjà discuté, les fonctions d'entrée-sortie dans les spécificateurs de format et les espaces réservés et nous devons spécifier les types de données des variables dans lesquelles les données sont lues ou écrites.
Contrairement à cela, les objets de streaming utilisés en C ++ - cin et cout n'utilisent aucun spécificateur de format ou espace réservé. Ils utilisent surchargé >> et<< operators to read in and write the data.
=> Consultez le guide de formation Perfect C ++ ici.
lecture recommandée
- Fonctions de chaîne Python
- Fonctions de date VBScript: fonctions de format de date, d'ajout de date et de cDate
- Variables et fonctions JMeter
- Fonctions Python
- Fonctions de bibliothèque en C ++
- Fonctions de script du shell Unix avec paramètres et retour
- Fonctions de date et d'heure en C ++ avec des exemples
- Fonctions Friend en C ++