Οι Λογικοί Τελεστές στη C

Οι Λογικοί Τελεστές στη C

Οι Λογικοί Τελεστές στη 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’)

για να αποφύγουμε έτσι αυτούς τους χαρακτήρες.

Απάντηση

Αυτός ο ιστότοπος χρησιμοποιεί το Akismet για να μειώσει τα ανεπιθύμητα σχόλια. Μάθετε πώς υφίστανται επεξεργασία τα δεδομένα των σχολίων σας.