Οι Λογικοί Τελεστές στη C
Οι Λογικοί Τελεστές στη C είναι τρεις. Ο λογικός τελεστής && (AND), ο λογικός τελεστής || (OR), και ο λογικός τελεστής ! (NOT).
Στο παρακάτω παράδειγμα συνδυάζουμε τρεις σχεσιακές εκφράσεις με τον λογικό τελεστή &&, που είναι το γνωστό μας AND στην C. Το πρόγραμμα μετρά τους μη-λευκούς χαρακτήρες, δηλ. τους χαρακτήρες που δεν είναι κενό, enter και tab.
Οι Λογικοί Τελεστές στη C – Παράδειγμα
/*μετρά τους μη-λευκούς χαρακτήρες */ #include <stdio.h> #define PERIOD ‘.’ main(){ int ch; int charcount = 0; while ((ch = getchar()) != PERIOD) if (ch != ‘ ‘ && ch != ‘\n’ && ch != ‘\t’) charcount++; printf("Υπάρχουν %d μη-λευκοί χαρακτήρες. \n", charcount); }
Οι λογικοί τελεστές έχουν μικρότερη προτεραιότητα από τους σχεσιακούς τελεστές και υπάρχουν τρεις απ’ αυτούς στην C :
Τελεστής Σημασία
&& And (και)
|| Or (ή)
! Not (όχι)
Ο τελεστής ! έχει πολύ μεγάλη προτεραιότητα, μεγαλύτερη και από εκείνη του πολλαπλασιασμού, ίδια με την προτεραιότητα των σχεσιακών τελεστών και μικρότερη από εκείνη των παρενθέσεων. Ο τελεστής && έχει μεγαλύτερη προτεραιότητα από τον ||, αλλά και οι δύο βρίσκονται κάτω από τους σχεσιακούς τελεστές και πάνω από τους τελεστές καταχώρησης. Ακόμη, οι λογικές εκφράσεις στην C υπολογίζονται από αριστερά προς τα δεξιά.
Ο Τελεστής υπό Συνθήκη ?
Ένας άλλος τρόπος για να εκφράσουμε την πρόταση if else ονομάζεται έκφραση υπό συνθήκη και χρησιμοποιεί τον τελεστή υπό συνθήκη ? : που έχει τρεις τελεστέους. Το παρακάτω παράδειγμα βρίσκει την απόλυτη τιμή ενός αριθμού :
x = (y<0) ? -y : y;
Η πρόταση λέει τα εξής : «αν το y είναι μικρότερο από το 0, τότε x=-y, αλλιώς x=y».
Η γενική μορφή (σύνταξη) της έκφρασης υπό συνθήκη είναι η εξής :
έκφραση1 ? έκφραση2 : έκφραση3
Αν η έκφραση1 είναι αληθής (δηλ. όχι μηδέν), τότε ολόκληρη η έκφραση υπό συνθήκη έχει την τιμή της έκφρασης2, αν όμως η έκφραση1 είναι ψευδής (μηδέν), τότε ολόκληρη η έκφραση υπό συνθήκη έχει την τιμή της έκφρασης3.
Πώς βρίσκουμε τον μέγιστο από δύο αριθμούς :
max = (a>b) ? a : b
Ακολουθούν παραδείγματα :
(5>2) ? 1 : 2 έχει τιμή 1
(3>5) ? 1 : 2 έχει τιμή 2
(a>b) ? a : b έχει την τιμή του μεγαλύτερου μεταξύ των a και b
Αποφυγή Χαρακτήρων Κατά το Διάβασμα
Επειδή υπάρχει πάντα ο κίνδυνος ο χαρακτήρας νέας γραμμής <enter> να διαβαστεί ως ξεχωριστός χαρακτήρας και να δημιουργηθούν έτσι προβλήματα σε διαλογικά προγράμματα, μια λύση στο πρόβλημα αυτό είναι με τη χρήση της εντολής while :
while (getchar() != ‘\n’) /* αγνοεί το υπόλοιπο της γραμμής εισόδου */
;
Πρέπει να έχουμε υπόψη μας ότι η getchar() διαβάζει κάθε χαρακτήρα, συμπεριλαμβανομένων και των χαρακτήρων κενού διαστήματος (space), στηλοθέτησης (tab) και νέας γραμμής (enter), ενώ η scanf(), όταν διαβάζει αριθμούς, αγνοεί αυτούς τους χαρακτήρες. Μόνο όταν διαβάζουμε χαρακτήρες χρησιμοποιώντας τον προσδιοριστή %c, η scanf() συμπεριφέρεται όπως η getchar().
Για να αποφύγουμε τυχόν προβλήματα με το διάβασμα των χαρακτήρων που προαναφέραμε, μπορούμε να χρησιμοποιήσουμε την εξής εντολή if μέσα στο πρόγραμμά μας :
if (ch != ‘\n’ && ch != ‘ ‘ && ch != ‘\t’)
για να αποφύγουμε έτσι αυτούς τους χαρακτήρες.