Moderators Kercyn Δημοσ. 22 Φεβρουαρίου 2015 Moderators Δημοσ. 22 Φεβρουαρίου 2015 "r" ειναι συμβολοσειρα (string) 'r' ειναι χαρακτήρας (char) Στην c/c++ δεν δεν ισχυει η ισοτητα == για string. char* a="hello"; char* b="hello"; if(a== //false Για να συγκρινεις string πρέπει να συγκρινεις τον καθε χαρακτηρα. Αυτό δεν ισχύει στη C++, μπορείς να χρησιμοποιήσεις τον operator== για να συγκρίνεις strings (με τις όποιες παραλλαγές string, const char * κλπ). 21.4.8.2 operator== [string::operator==] template<class charT, class traits, class Allocator> bool operator==(const basic_string<charT,traits,Allocator>& lhs, const basic_string<charT,traits,Allocator>& rhs) noexcept; Returns: lhs.compare(rhs) == 0. @PavlaraS18 Όταν βάζεις διπλά εισαγωγικά " τότε αυτό που είναι μέσα θεωρείται const char * (σκέψου το κάτι σαν string). Για να είναι char, πρέπει να βάλεις μονά εισαγωγικά ' Δηλαδή πρέπει να το κάνεις έτσι: if (ap == 'r') { . . . }
PavlaraS18 Δημοσ. 22 Φεβρουαρίου 2015 Μέλος Δημοσ. 22 Φεβρουαρίου 2015 if (ap == 'r') { . . . } Επιτέλους δούλεψε!! Ευχαριστώ πολύ ! Κρατάω το τοπικ για τυχόν απορίες στο μέλλον ! Αν μπορεί κάποιος mod να αλλάξει τον τιτλο σε κάτι παραπλησιο (απορίες ενος αρχάριου ή κάτι τετοιό) θα ήταν υπέροχα!
migf1 Δημοσ. 22 Φεβρουαρίου 2015 Δημοσ. 22 Φεβρουαρίου 2015 Χρησιμοποιω το codeblocks για να δημιουργω τον κώδικα. Υπάρχει κάποια επιλογή απο εκεί μεσα? Ναι, το Code::Blocks περιλαμβάνει visual editor για το WxWidgets gui. ΥΓ. Παρεμπιπτόντως, δεν νομίζω πως η C++ είναι καλή επιλογή αμέσως μετά την ψευδογλώσσα, ιδιαίτερα αν προσπαθείς να την μάθεις μόνος σου.
PavlaraS18 Δημοσ. 22 Φεβρουαρίου 2015 Μέλος Δημοσ. 22 Φεβρουαρίου 2015 Ναι, το Code::Blocks περιλαμβάνει visual editor για το WxWidgets gui. ΥΓ. Παρεμπιπτόντως, δεν νομίζω πως η C++ είναι καλή επιλογή αμέσως μετά την ψευδογλώσσα, ιδιαίτερα αν προσπαθείς να την μάθεις μόνος σου. Δεν αντιμετοπιζω ιδιαιτερα προβληματα προς το παρον παντως... Ενταξει να περναει η ωρα μωρε!
gon1332 Δημοσ. 22 Φεβρουαρίου 2015 Δημοσ. 22 Φεβρουαρίου 2015 Πάντως το πρόβλημα που αντιμετώπισες μόλις τώρα είναι σοβαρό και απλά το ανέβαλες. Για να μη σου επιστρέφει αυτό που θέλεις, τότε μάλλον έχεις δηλώσει το ap σαν C-string (char *ή char[]). Η συνθήκη, έτσι όπως την είχες πριν και δε δούλευε σύγκρινε τη διεύ- θυνση του ap με τη διεύθυνση του literal "r". Προφανώς δεν είναι ί- διες, οπότε και θα επιστρέψει false. Όπως κατάλαβες, αν η υπόθεσή μου είναι σωστή, δε μπορείς να χρησιμοποιήσεις το == για σύγκριση. Σε αυτή τη περίπτωση πρέπει να χρησιμοποιήσεις την strcmp όπως φαίνεται παρακάτω: #include <cstring.h> if (!strcmp(ap, "r")) { ... }
PavlaraS18 Δημοσ. 22 Φεβρουαρίου 2015 Μέλος Δημοσ. 22 Φεβρουαρίου 2015 Πάντως το πρόβλημα που αντιμετώπισες μόλις τώρα είναι σοβαρό και απλά το ανέβαλες. Για να μη σου επιστρέφει αυτό που θέλεις, τότε μάλλον έχεις δηλώσει το ap σαν C-string (char *ή char[]). Η συνθήκη, έτσι όπως την είχες πριν και δε δούλευε σύγκρινε τη διεύ- θυνση του ap με τη διεύθυνση του literal "r". Προφανώς δεν είναι ί- διες, οπότε και θα επιστρέψει false. Όπως κατάλαβες, αν η υπόθεσή μου είναι σωστή, δε μπορείς να χρησιμοποιήσεις το == για σύγκριση. Σε αυτή τη περίπτωση πρέπει να χρησιμοποιήσεις την strcmp όπως φαίνεται παρακάτω: #include <cstring.h> if (!strcmp(ap, "r")) { ... } Η λύση που έδωσε ο Kercyn δούλεψε .Αυτό πάντως που μ έδωσες το βρήκα με αναζήτησ στο google (πριν απαντήση ο Kercyn) και δεν μου είχε δουλέψει (Παρεπιπτόντως δεν θέλει το strcmp(ap,"r") να ειναι =0?) Έβγαζε ερρορ. Την δήλωση την έχω κάνει ως εξης char ap;
Moderators Kercyn Δημοσ. 22 Φεβρουαρίου 2015 Moderators Δημοσ. 22 Φεβρουαρίου 2015 Αυτό που σου λέει ο gon1332 είναι για να συγκρίνεις C-strings (char * ή char[]), όχι char με char. Το ! είναι ο τελεστής NOT στη C (και στη C++). Στη C δεν υπάρχουν boolean μεταβλητές, οπότε η γλώσσα θεωρεί οτιδήποτε δεν είναι 0 ως true. Η strcmp επιστρέφει 0 άμα τα C-strings που έδωσες είναι ίδια, το 0 όμως όπως είπαμε θεωρείται από τη γλώσσα ως false. Άμα βάλεις και το ! μπροστά το 0 θα γίνει 1, άρα true. Αυτό που έγραψε ο gon1332 θα δούλευε στην περίπτωσή σου αν δήλωνες το ap ως char * ή char[]. Η strcmp απαιτεί τα strings που της δίνεις να είναι null-terminated (σε αντίθετη περίπτωση πρέπει να χρησιμοποιήσεις τη strncmp). Θα συμφωνήσω με το migf1· άσε τη C++ και πήγαινε σε κάτι πιο beginner-friendly, όπως η Python. Είδες τώρα για κάτι τόσο απλό πόσα (φαντάζομαι καινούρια για σένα) πράγματα έγραψα, και είμαι σίγουρος ότι κάποιος με περισσότερες γνώσεις μπορεί να γράψει άλλα τόσα για το ίδιο πράγμα. Η C και η C++ έχουν πολλές ιδιοτροπίες που μπορεί να σε δυσκολέψουν πάρα πολύ τώρα που ξεκινάς (και όχι, η ψευδογλώσσα δε θα σε βοηθήσει σε τέτοιου είδους ιδιοτροπίες).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα