moukoublen Δημοσ. 3 Σεπτεμβρίου 2012 Δημοσ. 3 Σεπτεμβρίου 2012 Δηλαδή αν δεν ισχύει η συνθήκη(έχουμε οποιαδήποτε μη-μηδενική τιμή ως αποτέλεσμα)τότε εμφανίζει τον αριθμό; Υ.Γ.Το 0 στη C δεν σημαίνει false; If ( κάτι ) -> true σημαίνει ότι κάτι != 0; Δοκίμασε να τρέξεις > if(0) puts("with 0"); if(1) puts("with 1"); if(5) puts("with 5"); if(-5) puts("with -5"); άρα if ( ! κάτι ) -> true σημαίνει ότι κατι == 0 Γενικά μέσα στο if μπορείς να βάλεις οποιωνδήποτε βασικό τύπο της C. Και η if θα λειτουργήσει με την ίδια λογική. θα "αποδώσει" false αν όλο το περιεχόμενο του (κάθε φορά) τύπου είναι 0;
nik324 Δημοσ. 3 Σεπτεμβρίου 2012 Δημοσ. 3 Σεπτεμβρίου 2012 Θελω να δεσμευσω μνημη για ενα πινακα δυο διαστασεων και κανω τα εξης...Θελω να μου ειπε αν ειναι 100% σωστο...Ευχαριστω για αλλη μια φορα... > int lines=5,cos=10; int i, **arr; arr = (int **) malloc(lines * sizeof(int*)); if (arr==NULL) { printf("Memory fail"); exit(EXIT_FAILURE); } for(i=0 ; i<cols ; i++) { arr[i]=(int *)malloc(cols * sizeof(int)); if (arr[i]==NULL) { printf("Memory fail"); exit(EXIT_FAILURE); } }
migf1 Δημοσ. 3 Σεπτεμβρίου 2012 Δημοσ. 3 Σεπτεμβρίου 2012 Θελω να δεσμευσω μνημη για ενα πινακα δυο διαστασεων και κανω τα εξης...Θελω να μου ειπε αν ειναι 100% σωστο...Ευχαριστω για αλλη μια φορα... > int lines=5,cos=10; int i, **arr; arr = (int **) malloc(lines * sizeof(int*)); if (arr==NULL) { printf("Memory fail"); exit(EXIT_FAILURE); } for(i=0 ; i<cols ; i++) { arr[i]=(int *)malloc(cols * sizeof(int)); if (arr[i]==NULL) { printf("Memory fail"); exit(EXIT_FAILURE); } } Το ... > for(i=0 ; i<cols ; i++) πρέπει ... > for(i=0 ; i<lines ; i++) και μέσα στο σώμα του ... > if (arr[i]==NULL) πρέπει να απελευθερώσεις με free() όλα τα arr[0] έως και arr[i-1]
nik324 Δημοσ. 6 Σεπτεμβρίου 2012 Δημοσ. 6 Σεπτεμβρίου 2012 > char s[8]="tralala" j=0; while (s[j]){ printf("%c-",s[j]); j++ } Τι θα τυπωσει αυτο; .Με μπερδευει το "-"... Θα τυπωσει το tralala αναποδα;
moukoublen Δημοσ. 6 Σεπτεμβρίου 2012 Δημοσ. 6 Σεπτεμβρίου 2012 Νομίζω πως το καλύτερο που έχεις να κάνεις σε πρώτη φάση είναι να το τρέξεις. Έπειτα, άσε έξω ότι σε μπερδεύει και πιάσε το λογικά. Έχεις ένα j που αυξάνεται. Έχεις μια printf που δείχνει να εκτυπώνει "%c" και για αυτό εμείς δίνουμε το s[j] (όπου το j είπαμε αυξάνεται). Ποιο είναι το συμπέρασμα σε σχέση τουλάχιστον με το γενικό αν τυπώνεται ανάποδα το string;
Star_Light Δημοσ. 7 Σεπτεμβρίου 2012 Δημοσ. 7 Σεπτεμβρίου 2012 > #include<stdio.h> int main(void) { char s[8]="tralala"; int j=0; while (s[j]){ printf("%c-",s[j]); j++; } return 0; } Ετσι οπως το έδωσες δεν θα τυπωνε τιποτα γιατι ειχε συντακτικα λάθη To - μετα το %c δεν χρησιμεύει κάπου εκτος και αν θέλεις μετα απο καθε χαρακτήρα να εκτυπώνεται και το '-' . Το tralala δεν θα τυπωθει ανάποδα. Για ποιο λογο να τυπωθεί ανάποδα. Ο βροχος ξεκινάει για s[0] και θα συνεχίζει οσο το s[j] δεν δίνει ψευδές. Στην περίπτωση σου δινει για j=7 επειδη συναντά τον μηδενικό χαρακτήρα για το τέλος του string. Εσυ τι θες να τυπώνεται ανάποδα ? > #include<stdio.h> int main(void) { char s[6]="hello"; int j=0; while (s[j]){ printf("%c",s[j]); j++; } printf("\n"); while(j>=0){ printf("%c", s[j]); j--; } return 0; }
capoelo Δημοσ. 10 Σεπτεμβρίου 2012 Μέλος Δημοσ. 10 Σεπτεμβρίου 2012 γιατί απλά δεν κάνεις αυτό; >for(i=0; i<MAX; i+= COUNTBY) printf("%d ",i); Το ξέρω ότι μπορεί να γίνει με πολύ πιο εύκολο τρόπο αλλα το βιβλίο που έχω(οδηγός της c-herbert schildt)προτείνει αυτό ως λύση.Προσωπικά πιστεύω ότι εφόσον δεν θα ισχύσει το i%COUNTBY θα εμφανίσει τον αριθμό διότι εκμεταλεύεται το γεγονός ότι η τιμή που επιστρέφει σε περίπτωση false(δηλαδή το 0),είναι και το αποτέλεσμα που θέλουμε να πάρουμε απο το i%COUNTBY. Υ.Γ.Δεν νομίζω να έγινα και τόσο κατανοητός ε;
Star_Light Δημοσ. 10 Σεπτεμβρίου 2012 Δημοσ. 10 Σεπτεμβρίου 2012 Γιατι δεν έγινες κατανοητος? Ψάχνεις να βρεις δηλαδη ποιο i διαιρείται τέλεια με το 3. Και μετα το εκτυπώνεις.
capoelo Δημοσ. 14 Σεπτεμβρίου 2012 Μέλος Δημοσ. 14 Σεπτεμβρίου 2012 Tο ξέρω αυτό,απλά η απορία μου είναι ότι στη συνθήκη λέει if(!i%COUNTBY)το οποίο δίνει false(δηλαδή 0).Γι'αυτό έγραψα όλη αυτή την αρλούμπα στο προηγούμενο post.Το ερώτημα μου είναι αν ισχύει η αρλούμπα που έγραψα.
migf1 Δημοσ. 14 Σεπτεμβρίου 2012 Δημοσ. 14 Σεπτεμβρίου 2012 Έχω τον εξής κώδικα: > #include<stdio.h> #include<stdlib.h> #define MAX 100 #define COUNTBY 3 int main(void) { int i; for(i=0;i<MAX;i++) if(!(i%COUNTBY))printf("%d ",i); system("Pause"); return 0; } ο οποίος μετρά απο 0 μέχρι MAX με βήμα COUNTBY.Το ερώτημα μου είναι το εξής:το if δουλεύει κατα κάποιο τρόπο σαν το strcmp;Δηλαδή αν δεν ισχύει η συνθήκη(έχουμε οποιαδήποτε μη-μηδενική τιμή ως αποτέλεσμα)τότε εμφανίζει τον αριθμό; Υ.Γ.Το 0 στη C δεν σημαίνει false; Ελπίζω να έγινα κατανοητός. Yeap, το 0 στην C ισοδυναμεί με false και οτιδήποτε ΜΗ μηδέν ισοδυναμεί με true (π.χ. 1, 45, -987, κλπ). Οπότε η συνθήκη του if στον κώδικα θα μπει στο σώμα της όταν το υπόλοιπο της διαίρεσης: i / COUNTBY (δηλαδή το αποτέλεσμα του: i % COUNTBY) ισούται με 0. Διότι όταν γίνει 0 το αποτέλεσμα, έχουμε: if ( !0 ) που σημαίνει: if ( !false ), δηλαδή: if ( true ). Προσπάθησε να αποφεύγεις αυτή την σύνταξη, προτίμησε την... > if (0 == i % COUNTBY) που είναι απείρως πιο κατανοητό ακόμα και με 1 ανάγνωση. ΥΓ. Επίσης, αν θέλεις να διευκολύνεις όλους όσους διαβάζουμε το φόρουμ, καθώς και όλους όσους ενδέχεται να διαβάσουν κώδικές σου, σταμάτα να γράφεις τα μονόγραμμα if-else σε μια μόνο γραμμή, η οποία δεν έχει και κανένα κενό. > if (0 == i % COUNTBY) printf("%d ",i);
imitheos Δημοσ. 18 Σεπτεμβρίου 2012 Δημοσ. 18 Σεπτεμβρίου 2012 > if (0 == i % COUNTBY) [offtopic] Το ξέρω ότι είμαι παράξενος αλλά μόνο εμένα μου φαίνεται πολύ άσχημη και δυσανάγνωστη η "ανάποδη" γραφή στα if ? [/offtopic]
migf1 Δημοσ. 18 Σεπτεμβρίου 2012 Δημοσ. 18 Σεπτεμβρίου 2012 [offtopic] Το ξέρω ότι είμαι παράξενος αλλά μόνο εμένα μου φαίνεται πολύ άσχημη και δυσανάγνωστη η "ανάποδη" γραφή στα if ? [/offtopic] Τσου, είναι και πολύς κόσμος ακόμα. Υπάρχει η γνωστή (από ποικίλα άλλα θέματα) διαμάχη όσων είναι υπερ και όσων είναι κατά. Εγώ προφανώς είμαι στους "υπέρ", περισσότερο σαν double-safety measure... C: http://c2.com/cgi/wi...antsFromTheLeft C++: http://www.moserware...r-but-this.html Java: http://www.mkyong.co...-in-comparison/
moukoublen Δημοσ. 18 Σεπτεμβρίου 2012 Δημοσ. 18 Σεπτεμβρίου 2012 Και εγώ έχω συνηθίσει να γράφω από την "αριστερή" μεριά την μεταβλητή-αντικείμενο όμως όντως αυτά που διάβασα στα link που παραθέτεις migf1 είναι πολύ σωστά και με βάλανε σε σκέψη. Ειδικά στην περίπτωση των null object γλιτώνεις κώδικα! (γιατί δε το είχα σκεφτεί από μόνος μου; )
Προτεινόμενες αναρτήσεις