Έχετε ήδη μάθει ότι η συνάρτηση printf() χρησιμοποιείται για να εμφανίσετε τιμές στη γλώσσα προγραμματισμού C.
Για να λάβετε είσοδο από το χρήστη, μπορείτε να χρησιμοποιήσετε τη συνάρτηση scanf() στη C:
#include <stdio.h> int main() { int num; printf("Please enter a number: "); scanf("%d", &num); printf("The number you entered is %d", num); return 0; }
Σε αυτό το παράδειγμα, η συνάρτηση printf() χρησιμοποιείται για να ζητήσει από το χρήστη να εισάγει έναν αριθμό. Η συνάρτηση scanf() χρησιμοποιείται για να αποθηκεύσει την τιμή που εισήγαγε ο χρήστης στη μεταβλητή num. Στη συνέχεια, η συνάρτηση printf() χρησιμοποιείται για να εμφανίσει την τιμή της μεταβλητής num στο χρήστη.
Σημειώστε ότι στο scanf(), χρησιμοποιούμε το %d
για να δηλώσουμε ότι προσδιορίζουμε έναν ακέραιο αριθμό, ενώ η μεταβλητή num περνάει σαν παράμετρος στη συνάρτηση με τον τελεστή & (address-of operator) για να πάρει την τιμή που θα δοθεί από το χρήστη.
Η συνάρτηση scanf()
επιτρέπει επίσης τη λήψη πολλαπλών εισόδων (ένας ακέραιος αριθμός και ένας χαρακτήρας στο παρακάτω παράδειγμα):
#include <stdio.h> int main() { int age; char gender; printf("Please enter your age and gender (M/F): "); scanf("%d %c", &age, &gender); printf("Your age is %d and your gender is %c", age, gender); return 0; }
Σε αυτό το παράδειγμα, ο χρήστης καλείται να εισαγάγει την ηλικία του και το φύλο του χαρακτηρισμένο ως “M” ή “F”. Η συνάρτηση scanf()
διαβάζει την είσοδο του χρήστη και αποθηκεύει την τιμή της ηλικίας στη μεταβλητή age
και το φύλο στη μεταβλητή gender
. Στη συνέχεια, η συνάρτηση printf()
χρησιμοποιείται για να εμφανίσει την ηλικία και το φύλο του χρήστη.
Στη συνάρτηση scanf()
, χρησιμοποιούμε το %d
για να προσδιορίσουμε ότι αναμένουμε έναν ακέραιο αριθμό, ενώ το %c
αναμένει έναν χαρακτήρα. Προσέξτε ότι η μεταβλητή gender
δεν περνάει με τον τελεστή &
(address-of operator) διότι είναι ένας χαρακτήρας και ήδη αντιστοιχεί σε έναν δείκτη.
Μπορείτε επίσης να λάβετε μια συμβολοσειρά που εισήγαγε ο χρήστης:
#include <stdio.h> int main() { char name[20]; printf("Please enter your name: "); scanf("%s", name); printf("Your name is %s", name); return 0; }
Σε αυτό το παράδειγμα, ζητείται από το χρήστη να εισαγάγει το όνομά του. Η συνάρτηση scanf()
διαβάζει τη συμβολοσειρά που εισήγαγε ο χρήστης και την αποθηκεύει στη μεταβλητή name
. Στη συνέχεια, η συνάρτηση printf()
χρησιμοποιείται για να εμφανίσει το όνομα του χρήστη.
Προσέξτε ότι χρησιμοποιούμε το %s
για να δηλώσουμε ότι αναμένουμε μια συμβολοσειρά ως είσοδο, ενώ η μεταβλητή name
είναι ένας δείκτης στην αρχή της συμβολοσειράς. Επίσης, δεν χρειάζεται να χρησιμοποιήσουμε τον τελεστή &
(address-of operator) όταν περνάμε τη μεταβλητή name
στη συνάρτηση scanf()
, καθώς αντιπροσωπεύει ήδη ένα δείκτη σε αυτήν τη συμβολοσειρά.
Ωστόσο, η συνάρτηση scanf()
έχει ορισμένα περιορισμούς: θεωρεί το κενό (κενό διάστημα, tab κλπ.) ως χαρακτήρα τερματισμού, το οποίο σημαίνει ότι μπορεί να εμφανίσει μόνο μια λέξη (ακόμα κι αν πληκτρολογήσετε πολλές λέξεις). Για παράδειγμα:
#include <stdio.h> int main() { char name[20]; printf("Please enter your full name: "); scanf("%s", name); printf("Your name is %s", name); return 0; }
Εάν εκτελέσετε αυτό το πρόγραμμα και πληκτρολογήσετε “John Smith” ως είσοδος, θα εμφανιστεί μόνο η λέξη “John” στην έξοδο της συνάρτησης printf()
, αγνοώντας το υπόλοιπο της εισόδου “Smith”.
Για να διαβάσετε πολλές λέξεις, μπορείτε να χρησιμοποιήσετε τη συνάρτηση fgets()
, η οποία διαβάζει μια σειρά από τον χρήστη και διακόπτει μόνο όταν ανιχνεύσει έναν χαρακτήρα νέας γραμμής ή έναν άλλο καθορισμένο χαρακτήρα τερματισμού. Έτσι, μπορείτε να διαβάσετε ολόκληρη την είσοδο του χρήστη, συμπεριλαμβανομένων χαρακτήρων κενού.
Από το παραπάνω παράδειγμα, θα περιμένατε το πρόγραμμα να εκτυπώσει “John Doe”, αλλά αυτό εμφανίζει μόνο το “John”.
Για αυτό το λόγο, όταν δουλεύουμε με συμβολοσειρές, συνήθως χρησιμοποιούμε τη συνάρτηση fgets()
για να διαβάσουμε μια γραμμή κειμένου. Πρέπει να σημειώσουμε ότι πρέπει να συμπεριλάβετε τα παρακάτω ορίσματα: το όνομα της μεταβλητής συμβολοσειράς, το sizeof(string_name)
και το stdin
:
#include <stdio.h> int main() { char name[20]; printf("Please enter your full name: "); fgets(name, sizeof(name), stdin); printf("Your name is %s", name); return 0; }
Σε αυτό το παράδειγμα, η συνάρτηση fgets()
διαβάζει μια γραμμή κειμένου από το χρήστη και την αποθηκεύει στη μεταβλητή name
. Η συνάρτηση sizeof()
χρησιμοποιείται για να καθορίσει το μέγεθος της μεταβλητής συμβολοσειράς name
, ενώ το stdin
υποδεικνύει ότι τα δεδομένα πρέπει να διαβαστούν από την κανονική ροή εισόδου του προγράμματος (δηλαδή από το πληκτρολόγιο).
Η fgets()
αποθηκεύει την ολόκληρη γραμμή, συμπεριλαμβανομένων κενών, στη μεταβλητή συμβολοσειράς.