nodreams.ct Δημοσ. 17 Ιανουαρίου 2003 Δημοσ. 17 Ιανουαρίου 2003 <pre><font class="small">code:</font><hr> #include <iostream.h> void main(void) { int i; char cmd[10]; cin >>cmd; if (cmd=="test") cout<< "douleuei :D"; else cout<< "den douleuei! ;("; } </pre><hr> Μπορει να μου πει καποιος γιατι οταν γραφω test εξακολουθει να γράφει "δεν δουλεύει"??? Ευχαριστώ!
krot Δημοσ. 17 Ιανουαρίου 2003 Δημοσ. 17 Ιανουαρίου 2003 θέλει : if (strcmp(cmd,"test")==0) το cmd και το "test" στην c είναι pointers δηλ. οταν γραφεις "test", o compiler γραφει "test" κάπου στην μνήμη και σου επιστρέφει τον pointer στην θέση αυτή που βέβαια είναι διαφορετικός από τον pointer cmd, άσχετα αν το περιεχόμετνο του cmd είναι "test" Στην c τα string χειρίζονται με pointers. Όταν γράφεις if (cmd=="test") συγρίνεις pointers όχι τα περιεχόμενα των pointers (strings)
nodreams.ct Δημοσ. 17 Ιανουαρίου 2003 Μέλος Δημοσ. 17 Ιανουαρίου 2003 ΟΚ σε ευχαριστώ πολύ φίλε μου! Για να καταλάβω.. η strcmp κοιτάει τι υπάρχει στην διευθυνση μνημης cmd (*cmd) και αν είναι "test" επιστρεφει 0;
krot Δημοσ. 17 Ιανουαρίου 2003 Δημοσ. 17 Ιανουαρίου 2003 <blockquote><font class="small">Quote nodreams.ct:</font><hr> ΟΚ σε ευχαριστώ πολύ φίλε μου! Για να καταλάβω.. η strcmp κοιτάει τι υπάρχει στην διευθυνση μνημης cmd (*cmd) και αν είναι "test" επιστρεφει 0; <hr /></blockquote> ναι αυτό κάνει. Για την ακρίβεια συγκρίνει τα δύο string (string compare), και αν είναι ίδια επιστρέφει 0 (θέλει να βάλεις και #include<string.h>)
Γηρυόνης Δημοσ. 17 Ιανουαρίου 2003 Δημοσ. 17 Ιανουαρίου 2003 Σωστός ο krot. Το == συγκρίνει τις θέσεις μνήμης, δηλαδή διευθύνσεις όπως 0x123AB λόγου χάρη. Αν και οι δύο μεταβλητές δείχνουνε (point) στην ίδια θέση μνήμης τότε το αποτέλεσμα σύγκρισης με == θα βγεί true. Από την άλλη η strcmp συγκρίνει τα δεδομένα που βρίσκονται στις θέσεις της μνήμης, δηλαδή την τιμή "test" που βρίσκεται για παράδειγμα στη θέση μνήμης 0x323BD.
nodreams.ct Δημοσ. 17 Ιανουαρίου 2003 Μέλος Δημοσ. 17 Ιανουαρίου 2003 OK παιδιά με καλύψατε πλήρως. Ευχαριστώ πολύ!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.