Είσοδος / Εξοδος δεδομένων |
printf():
Η συνάρτηση printf() εμφανίζει στην οθόνη (stdout) μορφοποιημένα δεδομένα ή/και συνοδευτικό κείμενο. Στην πραγματικότητα μετατρέπει σε χαρακτήρες τις τιμές των δεδομένων. Η γενική μορφή της συνάρτησης είναι:
printf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, στοιχείο-1, στοιχείο-2,... , στοιχείο-ν)
Τα "στοιχείο-1, στοιχείο-2, ..., στοιχείο-ν", είναι ονόματα μεταβλητών, σταθερές ή εκφράσεις. Η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ περικλείεται μέσα σε λατινικά διπλά εισαγωγικά (") και καθορίζει τον τρόπο εμφάνισης των δεδομένων. Η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ μπορεί να περιλαμβάνει:
επεξηγηματικό κείμενο, οτιδήποτε κείμενο θέλουμε
προσδιοριστές, που μπαίνουν απαραίτητα μέσα στην ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, μόνο όταν θέλουμε να εμφανίσουμε καποιο στοιχείο (μεταβλητές, σταθερές ή εκφράσεις) και
χαρακτήρες ελέγχου, που τους χρησιμοποιούμε για την διαμόρφωση της εμφάνισης
H ΣΕΙΡΑ_ΕΛΕΓΧΟΥ δεν είναι απαραίτητο να περιλαμβάνει όλα τα παραπάνω. Εξαρτάται από το τι θέλουμε να κάνουμε με την printf(). Αν θέλουμε απλά να εμφανίσουμε ένα μήνυμα, η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ θα περιλαμβάνει μόνο επεξηγηματικό κείμενο. Αν θέλουμε να παρουσιάσουμε το περιέχομένο κάποιων μεταβλητών μόνο, τότε η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ θα πρέπει περιλαμβάνει ένα προσδιοριστή για κάθε μεταβλητή που πρόκειται να παρουσιάσουμε. Αν θέλουμε να συνοδέψουμε την εμφάνιση των μεταβλητών με καποιο κείμενο, τότε η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ θα πρέπει να περιλαμβάνει και τους προσδιοριστές και το κείμενο. Αν επιπλέον επιθυμούμε την διαμόρφωση της εμφάνισης αυτών που πρόκειται να παρουσιάσουμε, τότε η ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, θα πρέπει να περιλαμβάνει και κάποιους χαρακτήρες ελέγχου.
Οι προσδιοριστές των στοιχείων τοποθετούνται μέσα στην ΣΕΙΡΑ_ΕΛΕΓΧΟΥ όπου θέλουμε να εμφανιστούν τα δεδομένα, έχουν σχέση με τον τύπο των δεδομένων που εμφανίζονται στην printf() και αρχίζουν με τον χαρακτήρα %. Ο αριθμός των προσδιοριστών είναι ίσος με τον αριθμό των στοιχείων. Για κάθε τύπο δεδομένων έχουμε τους εξής προσδιοριστές:
%d ή %i | Ακέραιος /int |
%c | Χαρακτήρας/char (1 μονο) |
%s | Σειρά χαρακτήρων (συμβολοσειρά) |
%f | Κινητής υποδιαστολής, δηλαδή float ή double |
%e | Κινητής υποδιαστολής, δηλαδή float ή double σε εκθετική μορφή |
%g | Κινητής υποδιαστολής σαν %e ή %f (όποιο είναι μικρότερο) |
%u | Ακέραιος χωρίς πρόσημο (unsigned int) |
%o | Ακεραιος σε οκταδικό σύστημα (χωρίς πρόσημο) |
%x ή %Χ | Ακέραιος σε δεκαεξαδικό σύστημα (χωρίς πρόσημο) |
Συχνά οι προσδιοριστές συνοδεύονται με αριθμούς που ορίζουν το εύρος της εμφάνισης του δεδομένου. Για παράδειγμα το %6d, σημαίνει ότι το δεδομένο είναι ακέραιος και ότι το εύρος του είναι 6 ψηφία (χαρακτήρες), ενώ το %7.2f, σημαίνει ότι το δεδομένο είναι κινητής υποδιαστολής και έχει εύρος 7 ψηφία με 2 ψηφία μετά την υποδιαστολή. Επίσης ο χαρακτήρας "+" μπροστά από τον προσδιοριστή (για παράδειγμα %+d) εμφανίζει το πρόσημο, ο χαρακτήρας "-" (πχ %-d) στοιχίζει αριστερά το αποτέλεσμα, ενώ το μηδέν (πχ %08d) γεμίζει με μηδέν τα κενά που είναι άδεια μπροστά από το αποτέλεσμα.
Οι χαρακτήρες ελέγχου χρησιμοποιούνται για τον διαμόρφωση (έλεγχο μάλλον, καθώς οι δυνατότητες διαμόρφωσης είναι περιορισμένες) της εμφάνισης και για την εκτύπωση των δεσμευμένων από την ΣΕΙΡΑ_ΕΛΕΓΧΟΥ χαρακτήρων (όπως τα εισαγωγικά). Ξεκινούν με την ανάποδη πλάγια κάθετο \ (backslash) και είναι:
\a | Hχητικό σήμα (<BELL>) |
\b | Ο χαρακτήρας <BACKSPACE> (διάστημα πίσω) |
\f | Ο χαρακτήρας νέας σελίδας (<FORM FEED>) |
\n | Νέας γραμμής (<LINE FEED>) |
\r | Επιστροφής (<CR>) |
\t | Oριζοντίου προκαθορισμένου διαστήματος (<ΤΑΒ>) |
\v | Κατακορύφου διαστήματος( <VTAB>) |
\' | Εμφάνιση του απλού εισαγωγικού |
\" | Εμφάνιση του διπλόυ εισαγωγικού |
\\ | Εμφάνιση της ανάποδης πλαγίας καθέτου |
\? | Εμφάνιση του λατινικού ερωτηματικού |
\xhhh | Εμφάνιση του χαρακτήρα hhh σε δεκαεξαδικό αριθμό |
\ooo | Εμφάνιση του χαρακτήρα οοο σε δεκαεξαδικό αριθμό |
Η printf() σαν συνάρτηση που είναι, επιστρέφει το αριθμό των χαρακτήρων που τυπώνονται.
Παραδείγματα:
ΕΝΤΟΛΕΣ ΤΗΣ C | ΑΠΟΤΕΛΕΣΜΑΤΑ |
---|---|
index=5; printf(" %d", index); |
5 |
index=5; printf("The value of variable index is: %d", index); |
The value of variable index is:5 |
index=5; printf("The value of variable index is:\n %d", index); |
The value of variable index is: 5 |
x=5; y=3; printf("%d + %d = %d", x, y, (x+y)); |
5+3 = 8 |
x=5; y=3; printf("x=%d /n y=%d /n x+y= %d", x, y, (x+y)); |
x=5 |
Kαι άλλα ολοκληρωμένα προγράμματα/παραδείγματα με την printf()
scanf():
Διαβάζει από το
πληκτρολόγιο (stdin) μορφοποιημένες τιμές μεταβλητών.
scanf (ΣΕΙΡΑ_ΕΛΕΓΧΟΥ, δείκτης_μεταβλητής-1, δείκτης_μεταβλητής-2,... , δείκτης_μεταβλητής-ν)
Η συνάρτηση scanf() μοιάζει πολύ με την printf() με μιά μεγάλη διαφορά. Όπως βλέπετε στην περιγραφή της δεν αναφέρεται σε πραγματικές μεταβλητές, αλλά σε δείκτες μεταβλητών. Δείκτης μιάς μεταβλητής είναι ουσιαστικά η διεύθυνση της στην κύρια μνήμη του υπολογιστή. Όταν δηλώνεται μία μεταβλητή σ' ένα πρόγραμμα, ουσιαστικά δεσμεύται στην μνήμη του υπολογιστή μία περιοχή, η οποία θα φιλοξενήσει κατά την διάρκεια της εκτέλεσης του πρόγράμματος τις τιμές που θα δώσουμε για αυτή την μεταβλητή. Αυτή η περιοχή μνήμης έχει μία συγκεκριμένη διευθυνση (πρόκεται για κάποιον ακέραιο αριθμό), που είναι η διευθυνση της μεταβλητής. Στην γλώσσα προγραμματισμού C, γιά ν' αναφερθούμε στην διεύθυνση μιάς μεταβλητής χρησιμοποιούμε το όνομα της μεταβλητής προσθέτοντας μπροστά το σύμβολο "&". Δηλαδή η έκφραση &var1 εννοεί την διευθυνση της μεταβλητής var1. Η scanf() λοιπόν αντίθετα με την printf() χρησιμοποιεί δείκτες μεταβλητών.
Προσέξτε όμως για το διάβασμα μιάς συμβολοσειράς, δεν χρησιμοποιούμε δείκτες, διότι το όνομα της μεταβλητής_συμβολοσειράς είναι ουσιαστικά η διεύθυνση του πρώτου χαρακτήρα (δηλαδή του πρώτου μέλους του πίνακα). Επίσης η scanf() έχει κάποια τιμή επιστροφής που ανάλογα είναι:
ο αριθμός των όρων που διάβασε επιτυχως ή
μηδέν (0) αν δεν μπορέσει να διαβάσει με επιτυχία ή
η τιμή του EOF (End Of File ) όταν φτάσει απροσδόκητα στο τέλος αρχείου
Παραδείγματα:
/* Διαβάζει από το πληκτρολόγιο την ακέραια μεταβλητή x */
printf("Enter first number: ");
scanf("%d", &x);
καλό είναι κάθε κλήση της scanf() να συνοδεύεται από μία κληση της printf(), όπως στο προηγούμενο παράδειγμα (η printf να μπαίνει πρίν την scanf), ώστε ο χρήστης γνωρίζει τι δεδομένο να εισάγει με το πληκτρολόγιο.
/* Διαβάζει από το πληκτρολόγιο μία μεταβλητή κινητής υποδιαστολής (fnum)
και μία ακέραια μεταβλητή (inum) */
printf ("Give me 1 float and 1 integer number:");
scanf("%f %d", &fnum, &inum);
Η κλήση:
n = scanf("%d%f", &i, &x);όταν η γραμμή εισαγωγής είναι 25 54.324
και οι δηλώσεις των μεταβλητών είναι:
int i, n; float x;
θα έχει σαν αποτέλεσμα η μεταβλητή n να πάρει την τιμή 2 η μεταβλητή i να πάρει την τιμή 25 και η μεταβλητή x να πάρει την τιμή 54.324
Το πιό συνηθισμένο λάθος:
π.χ. να δώστε scanf("%d",x) αντί για scanf("%d", &x), δηλαδή να ξεχάστε την διευθυνση της μεταβλητής.
Και ένα ολοκληρωμένο πρόγραμμα με την scanf()
puts():
Εμφανίζει στην οθόνη
μία σειρά χαρακτήρων (συμβολοσειρά).
puts(<συμβολοσειρά> |
<μεταβλητή_συμβολοσειράς>);
Είναι πιό απλή και πιό γρήγορη από την printf() αλλά χρησιμοποιείται μόνο για συμβολοσειρές (όχι για τις μεταβλητές ή τις σταθερές). Η puts() μετά την εμφάνιση της συμβολοσειράς, τυπώνει τον χαρακτήρα \n, δηλαδή επιστρέφει στην επόμενη σειρά. Ο χαρακτήρας \0 που υποδεικνύει το τέλος της συμβολοσειράς χρησιμοποιείται από την puts() και καλό θα έιναι να προσέχετε, ώστε η συμβολοσειρά που έχετε δώσει για εκτύπωση να περιέχει στο τέλος τον χαρακτήρα \0.
gets():
Διαβάζει από το
πληκτρολόγιο (είσοδος -stdin) μία σειρά χαρακτήρων (συμβολοσειρά).
gets(<μεταβλητή_συμβολοσειράς>);
Ιδιαίτερα χρήσιμη για διαλογική συζήτηση με τον υπολογιστή.
char name[20];
printf("What's your name:"); gets(name);
printf("Hello "); puts(name);
H gets() διαβάζει από το πληκτρολόγιο μέχρι να συναντήσει τον χαρακτήρα \n (πράγμα που συμβαίνει όταν πατήσουμε το <ENTER>). O χαρακτήρας \0 μπαίνει αυτόματα στο τέλος της συμβολοσειράς που πληκτρολογείτε.
Παραδείγμα με τις gets() και puts():
#include <stdio.h>
main()
{
char aaa[20];
char bbb[10] = "Ritsa";
printf("Hello my name is "); puts(bbb);
printf("What's your name:"); gets(aaa);
printf("\n");
printf("%s you 're welcome to our class...",aaa);
}
Η gets(), όπως θα δούμε παραπέρα, μπορεί να χρησιμοποιηθεί γενικώτερα για την εισαγωγή κάθε τύπου δεδομένων, σε συνδυασμό με άλλες συναρτήσεις της C, όπως η συνάρτηση atoi() που μετατρέπει χαρακτήρες σε αριθμούς.
putchar():
Εμφανίζει στην οθόνη ένα μόνο χαρακτήρα.
getchar():
Διαβάζει από το πληκτρολόγιο ένα χαρακτήρα. H συνάρτηση δεν δέχεται παράμετρους, απλά παίρνει έναν χαρακτήρα από το πληκτρολόγιο και δεν χρειάζεται να δώσουμε <ENTER>.
Παραδείγμα:
ch=getchar();
putchar(ch);
Αλλά και
putchar(getchar());
Στην προηγούμενη ενότητα | ||
Κ.Βασιλάκης / ΤΕΙ Κρήτης |