Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

  • Moderators
Δημοσ.

"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')
{
    . . .
}
Δημοσ.
if (ap == 'r')
{
    . . .
}

Επιτέλους δούλεψε!!  :-D

 

Ευχαριστώ πολύ ! Κρατάω το τοπικ για τυχόν απορίες στο μέλλον ! Αν μπορεί κάποιος mod να αλλάξει τον τιτλο σε κάτι παραπλησιο (απορίες ενος αρχάριου ή κάτι τετοιό) θα ήταν υπέροχα!

Δημοσ.

Χρησιμοποιω το codeblocks για να δημιουργω τον κώδικα. Υπάρχει κάποια επιλογή απο εκεί μεσα?

 

Ναι, το Code::Blocks περιλαμβάνει visual editor για το WxWidgets gui.

 

ΥΓ. Παρεμπιπτόντως, δεν νομίζω πως η C++ είναι καλή επιλογή αμέσως μετά την ψευδογλώσσα, ιδιαίτερα αν προσπαθείς να την μάθεις μόνος σου.

Δημοσ.

 

Ναι, το Code::Blocks περιλαμβάνει visual editor για το WxWidgets gui.

 

ΥΓ. Παρεμπιπτόντως, δεν νομίζω πως η C++ είναι καλή επιλογή αμέσως μετά την ψευδογλώσσα, ιδιαίτερα αν προσπαθείς να την μάθεις μόνος σου.

Δεν αντιμετοπιζω ιδιαιτερα προβληματα προς το παρον παντως... Ενταξει να περναει η ωρα μωρε! :P

Δημοσ.

Πάντως το πρόβλημα που αντιμετώπισες μόλις τώρα είναι σοβαρό

και απλά το ανέβαλες. Για να μη σου επιστρέφει αυτό που θέλεις,

τότε μάλλον έχεις δηλώσει το ap σαν C-string (char *ή char[]). Η

συνθήκη, έτσι όπως την είχες πριν και δε δούλευε σύγκρινε τη διεύ-

θυνση του ap με τη διεύθυνση του literal "r". Προφανώς δεν είναι ί-

διες, οπότε και θα επιστρέψει false. Όπως κατάλαβες, αν η υπόθεσή

μου είναι σωστή, δε μπορείς να χρησιμοποιήσεις το == για σύγκριση.

Σε αυτή τη περίπτωση πρέπει να χρησιμοποιήσεις την strcmp όπως

φαίνεται παρακάτω:

#include <cstring.h>

if (!strcmp(ap, "r")) { ... }
Δημοσ.

 

Πάντως το πρόβλημα που αντιμετώπισες μόλις τώρα είναι σοβαρό

και απλά το ανέβαλες. Για να μη σου επιστρέφει αυτό που θέλεις,

τότε μάλλον έχεις δηλώσει το 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
Δημοσ.

Αυτό που σου λέει ο 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++ έχουν πολλές ιδιοτροπίες που μπορεί να σε δυσκολέψουν πάρα πολύ τώρα που ξεκινάς (και όχι, η ψευδογλώσσα δε θα σε βοηθήσει σε τέτοιου είδους ιδιοτροπίες).

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...