formatting i o printf
Αυτό το σεμινάριο συζητά τη χρήση και τα παραδείγματα λειτουργιών όπως printf, sprintf, scanf που χρησιμοποιούνται για τη διαμόρφωση εισόδου / εξόδου σε C ++:
Στα προηγούμενα μαθήματα C ++, έχουμε δει ότι μπορούμε να εκτελέσουμε λειτουργίες Input-Output στο C ++ χρησιμοποιώντας cin / cout.
Εκτός από τη χρήση αυτών των κατασκευών, μπορούμε επίσης να χρησιμοποιήσουμε τη βιβλιοθήκη C. Χρησιμοποιώντας C Standard Input and Output Library (cstdio, C ++ ισοδύναμο για stdio.h header σε γλώσσα C), εκτελούμε λειτουργίες εισόδου / εξόδου χρησιμοποιώντας 'streams' που λειτουργούν με φυσικές συσκευές όπως πληκτρολόγια (τυπική είσοδος), εκτυπωτές, τερματικά (τυπική έξοδος ) ή άλλους τύπους αρχείων που υποστηρίζονται από το λειτουργικό σύστημα.
=> Δείτε τα εκπαιδευτικά σεμινάρια In-Depth C ++ εδώ.
Οι ροές δεν είναι παρά μια αφηρημένη οντότητα που χρησιμοποιείται για την αλληλεπίδραση με φυσικές συσκευές με ομοιόμορφο τρόπο. Όλες οι ροές έχουν παρόμοια χαρακτηριστικά και είναι ανεξάρτητες από τις συσκευές φυσικών μέσων.
Στα επόμενα θέματα σε αυτό το σεμινάριο, θα μάθουμε λεπτομερώς για μερικές λειτουργίες, δηλαδή printf, sprint και scanf.
Τι θα μάθετε:
- C ++ printf
- C ++ σπριντ
- C ++ σάρωση
- scanf / printf Vs. cin / cout Σε C ++
- Συχνές Ερωτήσεις
- συμπέρασμα
C ++ printf
Η συνάρτηση printf στο C ++ χρησιμοποιείται για την εγγραφή της εξόδου που έχει μορφοποιηθεί στο stdout.
Πρωτότυπο λειτουργίας:
int printf (const char * format,…);
Παράμετροι:
μορφή => Μια συμβολοσειρά δείκτη προς μηδενικό τερματισμό γραμμένο σε ροή αρχείων. Αποτελείται από χαρακτήρες μαζί με έναν προαιρετικό προσδιοριστή μορφής που ξεκινά με%. Ο προσδιοριστής μορφής αντικαθίσταται από κατάλληλες τιμές που ακολουθούν τη συμβολοσειρά μορφής.
… => Άλλα πρόσθετα ορίσματα που καθορίζουν τα δεδομένα που θα εκτυπωθούν με τη σειρά που καθορίζεται η μορφή.
Τιμή επιστροφής:
pl sql ερωτήσεις συνέντευξης για 3 χρόνια εμπειρίας
Επιτυχία => Το printf επιστρέφει τον αριθμό των χαρακτήρων που επιστρέφονται.
Αποτυχία => Αρνητική τιμή
Περιγραφή:
Η λειτουργία printf ορίζεται στην κεφαλίδα. Οι λειτουργίες printf γράφουν τη συμβολοσειρά που επισημαίνεται από το δείκτη 'format' σε τυπική έξοδο stdout. Η συμβολοσειρά μορφής μπορεί να περιέχει προσδιοριστές μορφής που στη συνέχεια αντικαθίστανται από τις μεταβλητές που μεταβιβάζονται στη συνάρτηση printf ως πρόσθετα ορίσματα (μετά από συμβολοσειρά μορφής)
Τύπος προσδιοριστή που χρησιμοποιείται στη λειτουργία printf ()
Μια γενική μορφή προσδιοριστή μορφής είναι
%(flags)(width)(.precision)(length)specifier
Δίνεται παρακάτω μια περιγραφή κάθε τμήματος του προσδιοριστή μορφής:
- % σημάδι: Αυτό είναι το κορυφαίο σύμβολο%
- Σημαίες: Μπορούν να έχουν τις ακόλουθες τιμές:
- -: Αριστερά δικαιολογεί το αποτέλεσμα μέσα στο πεδίο. Από προεπιλογή, δικαιολογημένο.
- +: Το σύμβολο του αποτελέσματος που επισυνάπτεται στην αρχή της τιμής, συμπεριλαμβανομένων των θετικών αποτελεσμάτων.
- Space: Ελλείψει σημείου, ο χώρος είναι προσαρτημένος στην αρχή του αποτελέσματος.
- #: Καθορίστε μια εναλλακτική μορφή μετατροπής.
- 0: Χρησιμοποιείται για ακέραιους και κυμαινόμενους αριθμούς. Λειτουργήστε ως κορυφαία μηδενικά απουσία χώρου.
- Πλάτος: Καθορίζει το ελάχιστο πλάτος πεδίου με τη μορφή * ή ακέραιας τιμής. Αυτό είναι προαιρετικό.
- Ακρίβεια: Καθορίζει την ακρίβεια με ένα «.» Ακολουθούμενο από ένα * ή έναν ακέραιο ή τίποτα. Αυτό είναι επίσης προαιρετικό.
- Μήκος: Το προαιρετικό όρισμα που καθορίζει το μέγεθος του ορίσματος.
- Προσδιοριστής: Αυτός είναι ένας προσδιοριστής μορφής μετατροπής.
Διάφοροι προσδιοριστές μορφής που χρησιμοποιούνται στο C ++ είναι οι εξής:
Μην | Προσδιοριστής | Περιγραφή |
---|---|---|
7 | εσύ | Μετατρέπει τον μη υπογεγραμμένο ακέραιο σε δεκαδική αναπαράσταση. |
1 | % | Εκτυπώνει ένα%. |
δύο | ντο | Εκτυπώνει έναν μόνο χαρακτήρα. |
3 | μικρό | Εκτυπώνει μια συμβολοσειρά. |
4 | δ / θ | Μετατρέπει τον υπογεγραμμένο ακέραιο σε δεκαδική αναπαράσταση. |
5 | ή | Μετατρέπει τον μη υπογεγραμμένο ακέραιο σε οκταδική αναπαράσταση. |
6 | x / Χ | Μετατρέπει τον μη υπογεγραμμένο ακέραιο σε δεκαεξαδική αναπαράσταση. |
8 | f / ΣΤ | Μετατρέπει τον αριθμό κυμαινόμενου σημείου σε δεκαδική αναπαράσταση. |
9 | και / Ε | Μετατρέπει τον αριθμό κυμαινόμενου σημείου σε δεκαδική εκθετική σημειογραφία. |
10 | α / Α | Μετατρέπει τον αριθμό κυμαινόμενου σημείου σε δεκαεξαδικό εκθέτη. |
έντεκα | g / G | Μετατρέπει τον αριθμό κυμαινόμενου σημείου σε δεκαδικό ή δεκαδικό εκθετικό συμβολισμό. |
12 | ν | Αριθμός χαρακτήρων που έχουν γραφτεί μέχρι στιγμής από αυτήν την κλήση συνάρτησης. |
13 | Π | Ένας δείκτης που δείχνει την ακολουθία χαρακτήρων που καθορίζεται από την υλοποίηση. |
Δίνεται παρακάτω ένα πλήρες παράδειγμα προγραμματισμού C ++ που δείχνει τη λειτουργία printf που συζητήθηκε παραπάνω.
Παράδειγμα C ++ printf
#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; }
Παραγωγή:
Το παραπάνω πρόγραμμα χρησιμοποιεί διάφορες κλήσεις στη λειτουργία printf και σημειώνουμε ότι κάθε κλήση στο printf χρησιμοποιεί διάφορους προσδιοριστές μορφής που συζητήσαμε παραπάνω. Ο προσδιοριστής μορφής% .3f δηλώνει μια τιμή float με έως και 3 δεκαδικά ψηφία. Οι υπόλοιπες κλήσεις printf εμφανίζουν τις τιμές χαρακτήρων, δεκαδικών, οκταδικών και δεκαεξαδικών.
C ++ σπριντ
Συνάρτηση Sprintf σε C ++ παρόμοια με τη λειτουργία printf εκτός από μία διαφορά. Αντί να γράφει την έξοδο σε τυπική έξοδο stdout, το sprintf γράφει την έξοδο σε ένα buffer συμβολοσειράς χαρακτήρων.
Πρωτότυπο λειτουργίας:
int sprintf (char * buffer, const char * format,…)
Παράμετροι:
buffer => Δείκτης σε ένα buffer συμβολοσειράς στο οποίο πρόκειται να γραφτεί το αποτέλεσμα.
Μορφή => Δείκτης σε μια συμβολοσειρά μηδενικής λήξης που είναι γραμμένη στη ροή αρχείων.
Σημείωση: Η συμβολοσειρά μορφής που χρησιμοποιείται στη συνάρτηση sprintf είναι η ίδια με αυτήν που συζητήθηκε ως μέρος της περιγραφής της λειτουργίας printf.
… => Άλλα πρόσθετα ορίσματα που καθορίζουν τα δεδομένα που θα εκτυπωθούν με τη σειρά που καθορίζεται η μορφή.
Αξία επιστροφής:
επιτυχία => Επιστρέφει τον αριθμό των χαρακτήρων που είναι γραμμένοι στο αρκετά μεγάλο buffer, εξαιρουμένου του τελικού μηδενικού χαρακτήρα.
Αποτυχία => Επιστρέφεται η αρνητική τιμή.
Περιγραφή:
Η συνάρτηση Sprintf ορίζεται στην κεφαλίδα. Η συνάρτηση sprintf χρησιμοποιείται για την εγγραφή μιας συμβολοσειράς που υποδεικνύεται από τη μορφή στο buffer συμβολοσειρών. Η μορφή συμβολοσειράς μπορεί να περιέχει προσδιοριστές μορφής ξεκινώντας από% που αντικαθίστανται από τις τιμές των μεταβλητών που μεταβιβάζονται στη συνάρτηση sprintf () ως πρόσθετα ορίσματα.
Ας δούμε ένα παράδειγμα προγράμματος C ++ που δείχνει τη χρήση της λειτουργίας sprintf.
Παράδειγμα 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; }
Παραγωγή:
Στο παραπάνω παράδειγμα, πρώτα, γράφουμε μια μορφοποιημένη συμβολοσειρά σε ένα buffer χαρακτήρων mybuf χρησιμοποιώντας τη συνάρτηση sprintf. Στη συνέχεια, εμφανίζουμε τη συμβολοσειρά στο stdout χρησιμοποιώντας cout. Τέλος, εμφανίζουμε τον αριθμό των χαρακτήρων που έχουν γραφτεί στο buffer mybuf.
C ++ σάρωση
Η λειτουργία scanf στο C ++ διαβάζει τα δεδομένα εισόδου από την τυπική είσοδο.
Πρωτότυπο λειτουργίας:
int scanf (const char * format,…)
Παράμετροι:
μορφή => Δείκτης σε μια συμβολοσειρά μηδενικής λήξης που καθορίζει τον τρόπο ανάγνωσης της εισόδου. Αυτή η συμβολοσειρά μορφής αποτελείται από προσδιοριστές μορφής.
… => Πρόσθετα επιχειρήματα που λαμβάνουν εισαγωγή δεδομένων. Αυτά τα πρόσθετα ορίσματα είναι διαδοχικά σύμφωνα με τον προσδιοριστή μορφής.
Τιμή επιστροφής:
επιτυχία => Επιστρέφει έναν αριθμό χαρακτήρων που έχουν διαβαστεί.
matchingFailure => Επιστρέφει μηδέν εάν παρουσιαστεί αποτυχία αντιστοίχισης πριν εκχωρηθεί το πρώτο όρισμα λήψης.
Αποτυχία εισαγωγής => Επιστρέφει EOF εάν παρουσιαστεί αστοχία εισόδου πριν από την εκχώρηση του πρώτου ορίσματος λήψης.
Περιγραφή:
Η λειτουργία Scanf () ορίζεται στην κεφαλίδα. Αυτή η συνάρτηση διαβάζει τα δεδομένα από το stdin και αποθηκεύει στις παρεχόμενες μεταβλητές.
Μορφή προσδιοριστής που χρησιμοποιείται στη λειτουργία scanf ()
Η γενική μορφή για τη συμβολοσειρά μορφής λειτουργίας scanf () είναι:
%(*)(width)(length)specifier
Έτσι, ο προσδιοριστής μορφής έχει τα ακόλουθα μέρη:
- Χαρακτήρας χωρίς κενό διάστημα: Αυτοί είναι οι χαρακτήρες εκτός από το% που καταναλώνουν έναν ίδιο χαρακτήρα από τη ροή εισόδου.
- Χαρακτήρας κενού χώρου: Όλοι οι διαδοχικοί χαρακτήρες κενού χώρου θεωρούνται ως ένας χαρακτήρας κενού διαστήματος. Το ίδιο ισχύει και για τις ακολουθίες διαφυγής.
- Προδιαγραφή μετατροπής: Έχει την ακόλουθη μορφή:
- %: Χαρακτήρας που καθορίζει την αρχή.
- *: Ονομάστηκε χαρακτήρας καταστολής ανάθεσης. Εάν υπάρχει, το scanf δεν αποδίδει το αποτέλεσμα σε παραμέτρους λήψης. Αυτή η παράμετρος είναι προαιρετική.
- Πλάτος πεδίου: Προαιρετική παράμετρος (θετικός ακέραιος) που καθορίζει το μέγιστο πλάτος πεδίου.
- Μήκος: Καθορίζει το μέγεθος της λήψης ενός επιχειρήματος.
Ο προσδιοριστής μορφής μετατροπής μπορεί να έχει ως εξής:
Μην | Προσδιοριστής μορφής | Περιγραφή |
---|---|---|
7 | x / Χ | Ταιριάζει με τον υπογραφικό δεκαεξαδικό ακέραιο. |
1 | % | Ταιριάζει με το κυριολεκτικό%. |
δύο | ντο | Ταιριάζει με έναν ή περισσότερους χαρακτήρες με πλάτος. |
3 | μικρό | Ταιριάζει με την ακολουθία του χαρακτήρα χωρίς κενό διάστημα έως το καθορισμένο πλάτος ή το πρώτο κενό διάστημα. |
4 | ρε | Ταιριάζει με το δεκαδικό. |
5 | Εγώ | Ταιριάζει ακέραιος. |
6 | ή | Ταιριάζει με μη υπογεγραμμένο οκταδικό ακέραιο. |
8 | εσύ | Ταιριάζει με τον υπογραφικό δεκαδικό ακέραιο. |
9 | a / A, e / E, f / F, g / G | Ταιριάζει με τον αριθμό κινητής υποδιαστολής. |
10 | (σειρά) | Ταιριάζει με τη μη-γρήγορη ακολουθία χαρακτήρων από το συγκεκριμένο σύνολο. Εάν προηγείται ^, τότε οι χαρακτήρες που δεν βρίσκονται στο σετ ταιριάζουν. |
12 | ν | Επιστρέφει μέχρι τώρα τον αριθμό των χαρακτήρων που έχουν διαβαστεί. |
13 | Π | Δείκτης για την ακολουθία χαρακτήρων συγκεκριμένης εφαρμογής. |
Στη συνέχεια, θα εφαρμόσουμε ένα δείγμα προγράμματος για να δείξουμε τη χρήση της λειτουργίας σάρωσης στο C ++
Παράδειγμα σάρωσης
#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; }
Παραγωγή:
Στο παραπάνω πρόγραμμα, διαβάζουμε δύο συμβολοσειρές εισόδου και έναν δεκαεξαδικό αριθμό. Στη συνέχεια συνδυάζουμε τις δύο χορδές και εμφανίζουμε την προκύπτουσα χορδή. Ο αριθμός μετατρέπεται σε δεκαδικό και εμφανίζεται.
scanf / printf Vs. cin / cout Σε C ++
scanf / printf | cin / κόστος |
---|---|
Τυπική είσοδος-έξοδος σε γλώσσα Γ. | Τυπική είσοδος-έξοδος σε γλώσσα C ++. |
Ορίζεται στο 'stdio.h'. | Ορίζεται στο 'iostream'. |
Το scanf και το printf είναι μια λειτουργία που χρησιμοποιείται για I / O. | cin και cout είναι αντικείμενα ροής. |
Η συμβολοσειρά μορφής χρησιμοποιείται για τη μορφοποίηση της εισόδου και της εξόδου. | Χειριστές >> και<< are overloaded and used along with cin and cout respectively. Δεν χρησιμοποιείται συμβολοσειρά μορφής. |
Προσδιορίζουμε τον τύπο των δεδομένων χρησιμοποιώντας το σύμβολο κράτησης θέσης. | Δεν χρειάζεται να προσδιορίσετε τον τύπο δεδομένων. |
Συχνές Ερωτήσεις
Ε # 1) Μπορείτε να χρησιμοποιήσετε το printf στο C ++;
Απάντηση: Ναί. Το Printf μπορεί να χρησιμοποιηθεί σε C ++. Για να χρησιμοποιήσουμε αυτήν τη λειτουργία σε ένα πρόγραμμα C ++, πρέπει να συμπεριλάβουμε την κεφαλίδα στο πρόγραμμα.
Ε # 2) Ποια γλώσσα χρησιμοποιεί το printf;
Απάντηση: Το Printf είναι η τυπική λειτουργία εξόδου σε γλώσσα Γ. Μπορεί επίσης να χρησιμοποιηθεί σε γλώσσα C ++ συμπεριλαμβάνοντας την κεφαλίδα στο πρόγραμμα C ++.
Q # 3) Τι είναι το% d στον προγραμματισμό C;
Απάντηση: Η τιμή% d στη συνάρτηση printf αναφέρεται σε ακέραια τιμή.
Q # 4) Γιατί & χρησιμοποιείται στο Scanf;
Απάντηση: Το & operator χρησιμοποιείται για πρόσβαση στη θέση μνήμης. Είναι συντομότερο να περάσετε ένα δείκτη στη μεταβλητή αντί να το περάσετε ρητά.
Q # 5) Ποια είναι η διαφορά μεταξύ printf () και sprintf ();
Απάντηση: Τόσο οι λειτουργίες printf () όσο και sprintf () είναι ίδιες εκτός από μία διαφορά. Ενώ το printf () γράφει την έξοδο στο stdout (τυπική έξοδος), το sprintf γράφει την έξοδο σε ένα buffer συμβολοσειράς χαρακτήρων.
Q # 6) Το Sprintf null τερματίζεται;
Απάντηση: Το sprintf επιστρέφει τον αριθμό των χαρακτήρων που είναι αποθηκευμένοι σε συστοιχίες συμβολοσειρών χαρακτήρων, εξαιρουμένου του χαρακτήρα μηδενικού τερματισμού.
Ε # 7) Γιατί το σπριντ δεν είναι ασφαλές;
Απάντηση: Η λειτουργία Sprintf δεν ελέγχει το μήκος της προσωρινής μνήμης προορισμού. Ως εκ τούτου, όταν το μήκος της συμβολοσειράς μορφής είναι πολύ μεγάλο, η συνάρτηση μπορεί να προκαλέσει την υπερχείλιση της προσωρινής μνήμης προορισμού. Αυτό μπορεί να οδηγήσει σε αστάθεια εφαρμογών και ζητήματα ασφαλείας καθιστώντας έτσι τη λειτουργία του sprintf μη ασφαλή.
συμπέρασμα
Σε αυτό το σεμινάριο, μάθαμε τις συναρτήσεις εισόδου-εξόδου της βιβλιοθήκης C - printf, sprintf και scanf που μπορούν να χρησιμοποιηθούν στο C ++ συμπεριλαμβάνοντας την κεφαλίδα που είναι η ισοδύναμη για την κεφαλίδα C.
Όπως ήδη συζητήθηκε, οι λειτουργίες εισόδου-εξόδου σε προσδιοριστές μορφής χρήσης και κάτοχοι θέσης και πρέπει να καθορίσουμε τους τύπους δεδομένων των μεταβλητών στις οποίες διαβάζονται ή γράφονται τα δεδομένα.
Σε αντίθεση με αυτό, τα αντικείμενα ροής που χρησιμοποιούνται στο C ++ - cin και το cout δεν χρησιμοποιούν προσδιοριστές μορφής ή σύμβολα κράτησης θέσης. Χρησιμοποιούν υπερφορτωμένο >> και<< operators to read in and write the data.
=> Ανατρέξτε στον τέλειο οδηγό εκπαίδευσης C ++ εδώ.
Συνιστώμενη ανάγνωση
- Λειτουργίες συμβολοσειράς Python
- Συναρτήσεις ημερομηνίας VBScript: Μορφή ημερομηνίας, DateAdd και συναρτήσεις cDate
- Μεταβλητές και συναρτήσεις JMeter
- Λειτουργίες Python
- Λειτουργίες βιβλιοθήκης στο C ++
- Unix Shell Script Functions με παράμετροι και Return
- Λειτουργίες ημερομηνίας και ώρας σε C ++ με παραδείγματα
- Λειτουργίες φίλων στο C ++