Δημοσιεύτηκε: 16 Αύγ 2011, 14:41
Star_Light έγραψε:
- Κώδικας: Επιλογή όλων
for (cp = s; *cp != '\0' && *cp != '\n'; cp++) // έως ότου βρεις '\0' ή '\n'
; // ... επανέλαβε
γιατι ή? εφοσον χρησιμοποιεις τον τελεστη && θες και τα 2 να ειναι TRUE
Ναι, απλά όταν το περιγράφεις με λόγια η συνθήκη σταματάει είτε όταν εκπληρωθεί η 1η σύγκριση είτε η 2η, γιατί αν π.χ. βρει '\n' τότε το *cp != '\n' γίνεται FALSE, οπότε TRUE && FALSE δίνει FALSE, οπότε σταματάει το loop. Ομοίως, αν βρει '\0' γίνεται FALSE το *cp != '\0'.
Οπότε στην πράξη το loop σταματάει όταν βρει '\0' ή όταν βρει '\n'. Τον έλεγχο για το '\0' τον έβαλα για την περίπτωση που ο χρήστης μας πληκτρολογήσει περισσότερους από MAX_SLEN χαρακτήρες, οπότε σε αυτές τις περιπτώσεις η fgets() βάζει το '\0' στον MAX_SLEN-1 χαρακτήρα του s, χωρίς να περιέχεται καθόλου '\n' στο s.
Αν δεν έβαζα αυτόν τον έλεγχο και άφηνα μονάχα τον *cp != '\n' τότε σε περιπτώσεις όπως η παραπάνω το loop θα έτρεχε... αιώνια
ΥΓ. Τελικά θα φύγω αύριο κι εγώ.