anyp4kouo_ydor Δημοσ. 15 Αυγούστου 2011 Δημοσ. 15 Αυγούστου 2011 γεια σας παιδιά, στο παρακάτω πρόγραμμα δεν εκτελείται η if αλλά η else. Δουλεύει με αριθμό μέσα στον πίνακα, δουλεύει με δείκτη στη συμβολοσειρά, αλλά δε δουλεύει με πίνακα και συμβολοσειρά. Η μεταγλώττιση μου το βγάζει σωστό, αυτό είναι που λένε λογικό λάθος; >#include "stdio.h" int main() { char leit[5]; printf("dose tin leksi"); scanf("%s",leit);/*ena*/ if (leit=="ena") { printf("egrapses: %s\n",leit); printf("sosto\n"); } else{ printf("oxi\n"); printf("lathos\n"); } return 0; }
Technology fan Δημοσ. 15 Αυγούστου 2011 Δημοσ. 15 Αυγούστου 2011 Για να συγκρίνουμε chars χρησιμοποιούμε την strcmp
nilosgr Δημοσ. 15 Αυγούστου 2011 Δημοσ. 15 Αυγούστου 2011 Ετσι οπως το γραφεις, συγκρινεις τις δυο θεσεις μνημης κι οχι το περιεχομενο τους, για να δεις θεση μνημης μιας μεταβλητης κανεις >printf("%p", metavlitiHpinakasHdeiktis); Για συμβολοσειρες εχουμε την strcmp οπως ειπε κι ο φιλος Technology fan, αν ομως δεν ηταν συμβολοσειρες και ηταν πχ πινακες ακεραιων μπορουσες να κανεις κατι τετοιο >if ( (*leit) == (*"ena") ) // λαθος υστερα απο παρατηριση του neverlastn το οποιο δουλευει και με συμβολσειρες, αλλα δεν ειναι ουτε "κομψο", ουτε ασφαλες. (επειδη οι συμβολοσειρες εχουν πολλα κρυφα πχ \0 ή \n)
ektwr_ Δημοσ. 15 Αυγούστου 2011 Δημοσ. 15 Αυγούστου 2011 >#include "stdio.h" #include <string.h> /* για την διαχείρηση συμβολοσειρών */ int main() { char leit[5]; printf("dose tin leksi"); scanf("%s",leit);/*ena*/ if (!strncmp(leit,"ena",3)) /* ή strcmp(leit,"ena") == 0 , για περισσότερα: (σε Unix Terminal: man strcmp)*/ { printf("egrapses: %s\n",leit); printf("sosto\n"); } else{ printf("oxi\n"); printf("lathos\n"); } return 0; }
neverlastn Δημοσ. 15 Αυγούστου 2011 Δημοσ. 15 Αυγούστου 2011 >if ( (*leit) == (*"ena") ) το οποιο δουλευει και με συμβολσειρες, αλλα δεν ειναι ουτε "κομψο", ουτε ασφαλες. (επειδη οι συμβολοσειρες εχουν πολλα κρυφα πχ \0 ή \n) Αυτό είναι λάθος απ'όσο μπορώ να πω. Ελέγχει μόνο τον πρώτο χαρακτήρα ('e'). strncmp είναι πράγματι η πιό σωστή λύση. Το γιατί μπορείς να το βρεις σε όποιο security book π.χ. αυτό (ΠΑΡΑ πολύ καλό): http://www.amazon.com/gp/product/0321335724/ref=pd_lpo_k2_dp_sr_2?pf_rd_p=1278548962&pf_rd_s=lpo-top-stripe-1&pf_rd_t=201&pf_rd_i=0321563212&pf_rd_m=ATVPDKIKX0DER&pf_rd_r=1WBBK5V1D4RNCA5TW5D2
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.