Ultron Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Γεια σας συμφορουμιτες! Θα ηθελα τα φωτα σας!φτιαχνω ενα προγραμματακι και θελω να κανει το εξης: θα δινω ενα string και θα το συγκρινω με ενα ονομα που βρισκεται μεσα σε ενα structure!Δοκιμασα αρκετα πραματα αλλα δεν απεδωσαν καρπους =/ >printf("Dwse to Last Name pou psaxneis:\n"); fgets(x,20,stdin); printf("\n%s", x); //ektupwnei to string if(x==data.lname)//to prwto pou dokimasa if(ret==strcmp(x, data.lname)) //2o Ισως ειμαι και τελειως εξω απο αυτο που ειναι στην πραγματικοτητα!Καποιος να δωσει τα φωτα του??? Ευχαριστω
MitsakosGR Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Το strcmp(x, data.lname) πρέπει να δουλέψει. Απλά μην το συγκρίνεις με το ret. Κάνε το κατευθείαν > if(!strcmp(x, data.lname))
Leuteris Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Σύγκριση δύο string κάνει η συνάρτηση strcmp() όπου αν είναι ίσα επιστρέφει 0 αν το πρώτο όρισμα είναι αλφαβητικά μικρότερο απο το δεύτερο επιστέφει -1 και να το πρώτο όρισμα είναι αλφαβητικά μεγαλύτερο απο το δεύτερο επιστέφει 1. Δηλαδή για να δείς αν είναι ίσα: >if(0==strcmp(x, data.lname))
nilosgr Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Λοιπον επειδη τα strings (οπως εχει καταλαβει) ειναι πινακες δεν γινετε να συγκκρινουμε ολοκληρο μπλοκ μνημης με ενα if (εξαλλου το x που βαζεις στην ουσια ειναι η θεση του πρωτου στοιχειου του πινακα, κι οχι ολος ο πινακας), για αυτο χρησιμοποιουμε την strcmp() η οποια επιστρεφει 0 (μηδεν) οταν τα δυο strings ειναι ιδια. Οποτε εσυ γραψε κατι τετοιο: >if(strcmp(x, data.lname) == 0) { . . . }
Ultron Δημοσ. 1 Δεκεμβρίου 2011 Μέλος Δημοσ. 1 Δεκεμβρίου 2011 Ευχαριστώ παρα πολυ παιδια για τις απαντησεις σας τα καταφερα!Σας ευχαριστω!
defacer Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Λοιπον επειδη τα strings (οπως εχει καταλαβει) ειναι πινακες δεν γινετε να συγκκρινουμε ολοκληρο μπλοκ μνημης με ενα if (εξαλλου το x που βαζεις στην ουσια ειναι η θεση του πρωτου στοιχειου του πινακα, κι οχι ολος ο πινακας), για αυτο χρησιμοποιουμε την strcmp() η οποια επιστρεφει 0 (μηδεν) οταν τα δυο strings ειναι ιδια. Δεν έχω κάτι να προσφέρω στη συζήτηση, αλλά technically τα strings δεν είναι πίνακες. Μπορεί οι πίνακες να κάνουν decay σε char*, όμως όσον αφορά τον compiler άλλο type είναι το char[] και άλλο το char*.
nilosgr Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Δεν έχω κάτι να προσφέρω στη συζήτηση, αλλά technically τα strings δεν είναι πίνακες. Μπορεί οι πίνακες να κάνουν decay σε char*, όμως όσον αφορά τον compiler άλλο type είναι το char[] και άλλο το char*. Συντακτικα ειναι το ιδιο (και πρακτικα)
migf1 Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 @nilos: πρακτικά δεν είναι το ίδιο... τα char[ length] δεν μπορούν να χρησιμοποιηθούν απευθείας ως lvalues, όπως δεν μπορούν και τα char * = "" (string literals)
defacer Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Συντακτικα ειναι το ιδιο (και πρακτικα) Βασικά δε με ενδιαφέρει να μπω σε συζήτηση/διαφωνία γιατί α) ξέρω πως έχω δίκιο και β) παλιότερα είχα και γω την ίδια παρανόηση που έχεις και συ τώρα. Αλλά έτσι για το χαβαλέ: αυτό που λες ότι "είναι το ίδιο", το λες απλά για να επιμείνεις στην προηγούμενη άποψή σου ή υπάρχει και κάποιο επιχείρημα; EDIT: Για παράδειγμα, δοκίμασε να κάνεις compile αυτό και δες που βγάζει error και πού δεν βγάζει error (σημαντικά και τα 2): >int main(void) { char* works1 = "foo"; char works2[] = "foo"; char* something; char* works3 = something; char oops[] = something; return 0; }
nilosgr Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Βασικά δε με ενδιαφέρει να μπω σε συζήτηση/διαφωνία γιατί α) ξέρω πως έχω δίκιο και β) παλιότερα είχα και γω την ίδια παρανόηση που έχεις και συ τώρα. Αλλά έτσι για το χαβαλέ: αυτό που λες ότι "είναι το ίδιο", το λες απλά για να επιμείνεις στην προηγούμενη άποψή σου ή υπάρχει και κάποιο επιχείρημα; >int main(int args, char* argv[]) int main(int args, char** argv)
migf1 Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 Δεν έχω κάτι να προσφέρω στη συζήτηση, αλλά technically τα strings δεν είναι πίνακες. Μπορεί οι πίνακες να κάνουν decay σε char*, όμως όσον αφορά τον compiler άλλο type είναι το char[] και άλλο το char*. Τα απλά strings πίνακες είναι, με ακριβώς τις ίδιες ιδιότητες των μη nul-terminated arrays of char, ομοίως και τα string literals. Όπως και οι πίνακες έτσι και τα strings και τα string-literals δεν μπορούν να χρησιμοποιηθούν απευθείας ως lvalues για assignments στον δείκτη εκκίνησής τους (τα string literals δεν μπορούν πουθενά). Εκεί ακριβώς διαφέρουν από τα pure char * (που έτσι κι αλλιώς από μόνα τους δεν είναι πίνακες).
defacer Δημοσ. 1 Δεκεμβρίου 2011 Δημοσ. 1 Δεκεμβρίου 2011 >int main(int args, char* argv[]) int main(int args, char** argv) Σκέψου αυτό το αντιπαράδειγμα (δες το να τρέχει): >void test(short blah) { } int main(void) { test(42); printf("%zu\n", sizeof(short)); printf("%zu\n", sizeof(42)); return 0; } To γεγονός ότι υπάρχει μηχανισμός με τον οποίο κάποιοι types μπορούν να μετατραπούν σε κάποιους άλλους κάτω από συγκεκριμένες συνθήκες δεν σημαίνει ότι οι types αυτοί είναι το ίδιο.
Ultron Δημοσ. 1 Δεκεμβρίου 2011 Μέλος Δημοσ. 1 Δεκεμβρίου 2011 Παίδες για να μην ανοίγω αλλο θεμα θελω ας πουμε ο χρηστης να βάζει uniqueid δλδ να μην εισαγεται 2η ιδια τιμη >do { printf("enter unique id:"); scanf("%d",&i); while ((fread((char *) &data, sizeof (data), 1, file)) == 1) { if (i==data.uniqueid){ system("cls"); printf("the id already exists\n"); printf("enter unique id:"); scanf("%d",&i); if(i!=data.uniqueid)break; } } } while (!mygeti(&data.uniqueid)); > //to function mygeti int mygeti(int *result) { char buff [ 13 ]; /* signed 32-bit value, extra room for '\n' and '\0' */ return fgets(buff, sizeof buff, stdin) && sscanf(buff, "%d", result) == 1; } να τονισω πως το αρχειο το εχω ανοιξει >FILE *file = fopen(filename, "a+");
migf1 Δημοσ. 2 Δεκεμβρίου 2011 Δημοσ. 2 Δεκεμβρίου 2011 Sorry για το off-topic, αλλά τι κακό είναι αυτό ρε παιδιά με τους κώδικες "ορνιθοσκαλίσματα"; Έχετε τσακωθεί με τα tabs και τα spaces; 8 στους 10 κώδικες που ποστάρονται στο φόρουμ από αρχάριους θέλουν... αποκρυπτογράφηση! Προσωπικά έχω πάψει να ρίχνω καν 2η ματιά σε τέτοιου είδους κώδικες...
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα