ΥΓ. Επίσης μονούς χαρακτήρες τύπωνέ τους με την putchar() γιατί η printf() είναι πάααρα πολύ αργή συνάρτηση. Α, και for με μια μόνο γραμμή κυρίως σώματος δεν χρειάζονται άγκιστρα
Συντονιστής: konnn


migf1 έγραψε:Η func() οκ είναι, με εξαίρεση πως δεν διαγράφεις το '\n' που βάζει στο str η fgets(). Η rev_func() δεν είναι οκ, γιατί το str_ptr δεν το αρχικοποιείς πουθενά!!!!
ΥΓ. Επίσης μονούς χαρακτήρες τύπωνέ τους με την putchar() γιατί η printf() είναι πάααρα πολύ αργή συνάρτηση. Α, και for με μια μόνο γραμμή κυρίως σώματος δεν χρειάζονται άγκιστρα


Star_Light έγραψε:
Μα δεν ηθελα να αρχικοποιησω τον δεικτη στην 2η συναρτηση με την λογικη οτι διατηρει την τιμη του απο πριν βεβαια αυτο που με προβληματισε ειναι οτι δεν υπαρχει πουθενα call by ref.

migf1 έγραψε:->Το *ptr_str είναι χαρακτήρας, το ptr_str είναι ο δείκτης.
Νομίζω είναι καλύτερα να δεις πρώτα τον κώδικά μου, κι αφού βεβαιωθείς πως έχεις καταλάβει πως και γιατί λειτουργεί (ειδικά η χρήση του προσωρινού δείκτη: cp) τότε να προσπαθήσεις να κάνεις μόνος σου κάποια άλλη άσκηση.
Π.χ. μια συνάρτηση που θα ανακατεύει τους χαρακτήρες ενός string s που θα παίρνει σαν όρισμα. Ή δικές σου υλοποιήσεις των έτοιμων συναρτήσεων strncmp() και strncpy(). Ή μια συνάρτηση που θα παίρνει σαν όρισμα ένα strings s και θα συγκεντρώνει στην αρχή του s όλα τα σύμφωνα, στο τέλος του όλα τα φωνήεντα, και στη μέση όποιους χαρακτήρες δεν είναι γράμματα . Για ευκολία θεώρησε πως έχεις μόνο λατινικά γράμματα στο s.
migf1 έγραψε:
Πως να τη διατηρήσει την τιμή του, αφού είναι ορισμένο ως τοπική μεταβλητή της func() οπότε όταν τερματίσει η συνάρτηση διαγράφεται ο δείκτης. Το ότι σου δουλεύει, αν σου δουλεύει, είναι τυχαίο.

for (cp = s; *cp != '\0' && *cp != '\n'; cp++) // έως ότου βρεις '\0' ή '\n'
; // ... επανέλαβε 
Star_Light έγραψε:
- Κώδικας: Επιλογή όλων
for (cp = s; *cp != '\0' && *cp != '\n'; cp++) // έως ότου βρεις '\0' ή '\n'
; // ... επανέλαβε
γιατι ή? εφοσον χρησιμοποιεις τον τελεστη && θες και τα 2 να ειναι TRUE

migf1 έγραψε:
Ναι, απλά όταν το περιγράφεις με λόγια η συνθήκη σταματάει είτε όταν εκπληρωθεί η 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 θα έτρεχε... αιώνια
ΥΓ. Τελικά θα φύγω αύριο κι εγώ.
for(str_ptr=str; *str_ptr!='\n'; str_ptr++) 
