ge0kas1m Δημοσ. 17 Ιανουαρίου 2007 Δημοσ. 17 Ιανουαρίου 2007 dev-C++ psifizw kai gw kai sas xeretw 1o mou post
alkisg Δημοσ. 17 Ιανουαρίου 2007 Δημοσ. 17 Ιανουαρίου 2007 Βρε παιδιά η devcpp δεν έχει πάνω από 2 χρόνια να βγάλει νέα έκδοση; Τι έγινε, το παρατήσανε;
afnman Δημοσ. 17 Ιανουαρίου 2007 Δημοσ. 17 Ιανουαρίου 2007 H bloodshed έχει το dev-cpp 5.0 σε beta ακόμη....
chiossif Δημοσ. 18 Ιανουαρίου 2007 Δημοσ. 18 Ιανουαρίου 2007 Παρότι ο δάσκαλος++ προτείνει αυτούς [ http://www.research.att.com/~bs/compilers.html ] θα συμφωνήσω μαζί του στο ότι είναι ΠΟΛΥ περισσότεροι και ΕΧΕΙ ΞΕΧΑΣΕΙ και κάποιους. Γι'αυτό συμπληρώνω από την ίδια ιστοσελίδα με τα links [ http://www.compilers.net/Dir/Free/Compilers/CCpp.htm ] και [ http://dmoz.org/Computers/Programming/Languages/C%2b%2b/Compilers/ ] ψηφίζοντας τελικά ( και σύμφωνος με τον alkisg ) : [ http://www.codeblocks.org ] Επιτρέψτε μου με την σειρά μου και κάποιες ερωτήσεις: 1. Τι πρότεινα μόλις τώρα compiler ή IDE? Ο μάστερ++ τι προτείνει τελικά? 2. Μα καλά δεν έχει ξανασυζητηθεί αυτό το θέμα? Και που είναι οι φίλοι με τα παλαιότερα link? 3. Ο Οιδίποδας ΕΙΝΑΙ γιός -και φονιάς- του Λάιου. Ο Λεωνίδας μήπως είναι και αυτός Λαβδακίδας (απόγονος του Λάβδακου) ? -Μια και το μελέτησα ελπίζω το 300 να αξίζει όταν βγει-
alkisg Δημοσ. 18 Ιανουαρίου 2007 Δημοσ. 18 Ιανουαρίου 2007 > H bloodshed έχει το dev-cpp 5.0 σε beta ακόμη.... Η τελευταία beta βγήκε το Φεβρουάριο του 2005... Να μην πω για την τελευταία final! > 1. Τι πρότεινα μόλις τώρα compiler ή IDE? Πρότεινες codeblocks IDE. Αυτός συνήθως έρχεται με mingw compiler (= ξάδερφος του gcc, θείος του Οιδίποδα).
djapal Δημοσ. 18 Ιανουαρίου 2007 Δημοσ. 18 Ιανουαρίου 2007 ΑΝ μιλάμε για IDE, τότε http://forums.codeblocks.org/index.php?PHPSESSID=1155379219301cfc3576bb4b35284b5f&topic=4962.0 CodeBlocks Nightly Build χτεσινό. Καμία σχέση με την RC2 που υπάρχει εδώ και ... αιώνες στην κεντρική σελίδα!
Lomar Δημοσ. 19 Ιανουαρίου 2007 Μέλος Δημοσ. 19 Ιανουαρίου 2007 Λοιπόν κατέβασα και δοκίμασα τους εξής compiler... 1.Visual Studio Express 2.CodeBlocks 3.Dev-C++ Και στους 3, δεν μου αναγνωρίζεται η συνάρτηση strlen() απο την βιβλιοθήκη stdlib.h... Τι να κάνω; Ο Κώδικας ο οποίος θέλω να εκτελέσω, προκειμένου να καταλάβω κάτι με τα αλφαριθμητικά, είναι ο εξής: > #include <stdio.h> #include <stdlib.h> main () { char *s; int i; s=malloc(100); if (!s) { printf ("\n\n AKURO \n\n"); return 0; } printf ("\n\n To megisto mikos tis symvoloseiras prepei na einai: %d, \n Dwse tin symvoloseira:", sizeof(*s)); gets(s); for (i=strlng(s)-1;i>=0;i--) putchar(s[i]); system ("pause"); free(s); return 0; } Το ξέρω οτι είναι πολύ απλοϊκός, και απλός, κώδικας, αλλά θέλω να καταλάβω στη for γιατί ξεκινάει την εκτύπωση του string ανάποδα, απο τον 8ο (7η δλδ θέση) χαρακτήρα, προς τον πρώτο (δλδ στη 0κη θέση). thnks in advance για τις απαντήσεις, έχω απελπιστεί πια με αυτή τη κατάσταση των compiler και την τρίτη έχω εξεταστική στο εργαστήριο της C (και έχω ακόμη να κάνω επανάληψη σε structures και Files!)
dop Δημοσ. 19 Ιανουαρίου 2007 Δημοσ. 19 Ιανουαρίου 2007 1ο λάθος: η main() είναι int main(void) ή int main(int argc, char *argv) 1η παρατήρηση: καλό είναι να αποφεύγεται το malloc(100). Καλύτερο είναι το s = malloc(100*sizeof(*s)); 2ο λάθος: η sizeof(*s) επιστρέφει 1. Νομίζω δεν είναι αυτό που θέλεις. 2η παρατήρηση: καλύτερα να χρησιμοποιείς την fgets() και όχι την gets(). Στην πρώτη μπορείς να καθορίσεις και το μέγεθος του buffer για να μην έχει buffer overrun. Το πραγματικό λάθος: η συνάρτηση είναι strlen() και όχι strleng(). Γιατί τυπώνει ανάποδα: αν ακολουθήσεις το loop θα δεις ότι κάνεις το εξής: Αν το string σου είναι 10 χαρακτήρες, η strlen() επιστρέφει 10. Ξεκινάς το iteration από τον χαρακτήρα στην θέση 9 του s και προχωράς προς το 0. Οπότε, λογικά, τυπώνεται ανάποδα.
Lomar Δημοσ. 19 Ιανουαρίου 2007 Μέλος Δημοσ. 19 Ιανουαρίου 2007 thnks dop!!!! Πρόβλημα, ακόμα και ως strlen() πάλι δεν την βλέπουν μερικοί compilers!!! > #include <stdio.h> #include <stdlib.h> int main(void) { char *s; int i; s=malloc(100); if (!s) { printf ("\n\n AKURO \n\n"); return 0; } printf ("\n\n To megisto mikos tis symvoloseiras prepei na einai: %d, \n Dwse tin symvoloseira:", sizeof(*s)); gets(s); for (i=strlen(s)-1;i>=0;i--) putchar(s[i]); system ("pause"); free(s); return 0; } Ο Dev-C++ δεν μου βγάζει καθόλου error, αλλά το εξής μήνυμα: Compiler and linker output sel41_c2(Το όνομα του αρχείου δλδ):No such file or directory cc1.exe(Δεν ξέρω τι είναι): Invalid option `-auxbase' cc1.exe: έλεος... πάω για αυτοκτονία... κάποιος ή κάτι δε θέλει να περάσω το μάθημα
parsifal Δημοσ. 19 Ιανουαρίου 2007 Δημοσ. 19 Ιανουαρίου 2007 ...Πρόβλημα, ακόμα και ως strlen() πάλι δεν την βλέπουν μερικοί compilers!!!... Μα πώς σου κόλλησε ότι η strlen περιέχεται στο <stdlib.h> ? Στο <string.h> βρίσκεται!!!
Lomar Δημοσ. 19 Ιανουαρίου 2007 Μέλος Δημοσ. 19 Ιανουαρίου 2007 :oops: Τώρα το είδα... Μόλις έσωσες έναν άνθρωπο που ήταν έτοιμος να πηδήξει απο τον 3ο... Αλλά ακόμη δε μπορώ να καταλάβω τι γίνεται με την δέσμευση μνήμης... εκεί που λέει το πρόγραμμα στις δηλώσεις: char *s; και δηλώνει την συμβολοσειρά γιατί απο κάτω χρειάζεται η malloc; Το δοκίμασα και χωρίς malloc και μου τρέχει κανονικά, μόνο όταν το δηλώνω με την θέση μνήμης του, δλδ *s και όχι (παρόλο που έχω βγάλει την malloc) s, στη δεύτερη περίπτωση, μου βγάζει ένα σορο error... Γενικά μπορεί κάποιος με απλές εντολές (όχι fgets κτλ) να μου γράψει ένα πρόγραμμα που να ορίζεται δυναμικά το μέγεθος μιας συμβολοσειράς;
parsifal Δημοσ. 19 Ιανουαρίου 2007 Δημοσ. 19 Ιανουαρίου 2007 Αν και δεν κατάλαβα τί ακριβώς εννοείς "να ορίζεται δυναμικά το μέγεθος μιας συμβολοσειράς", να ο προηγούμενος κώδικάς σου λίγο αλλαγμένος: >#include <stdio.h> #include <stdlib.h> #include <string.h> #DEFINE MAX_CHARS 100 int main(void) { int i; char*s; if(!(s = malloc((MAX_CHARS+1)*sizeof(char)))) { printf("\nSfalma sth desmeysh mnhmhs!\n"); return -1; } printf("\nMegisto epitrepomeno mhkos symvoloseiras: %d\nDwste symvoloseira: ", MAX_CHARS); gets(s); for(i = 0; i < strlen(s); i++) putchar(s[i]); free(s); system("pause"); return 0; }
dop Δημοσ. 19 Ιανουαρίου 2007 Δημοσ. 19 Ιανουαρίου 2007 Καλύτερα να σώνεις κάπου το μέγεθος της συμβολοσειράς, αφού η κλήση της strlen() κοστίζει αρκετά. > size_t i, end; ... end = strlen(s); for (i=0; i<end; ++i) putchar(s[i]); Ακόμα καλύτερο είναι το παρακάτω (για να μαθαίνεις τα εσωτερικά των strings): > char *t; ... ... for (t=s; *t!='\0'; ++t) putchar(*t);
Lomar Δημοσ. 19 Ιανουαρίου 2007 Μέλος Δημοσ. 19 Ιανουαρίου 2007 οκ αυτό είναι πιο κατανοητο, αν και πιο πολυπλοκο απο την λύση του καθηγητή... thnks
parsifal Δημοσ. 19 Ιανουαρίου 2007 Δημοσ. 19 Ιανουαρίου 2007 Lomar, από την ερώτηση σου, αλλά και από την προηγούμενη που απορείς για τη χρησιμότητα της malloc μετά από τη δήλωση του δείκτη, συμπεραίνω ότι δεν έχεις κατανοήσει επαρκώς την έννοια του δείκτη. Μάλλον πρέπει να ανατρέξεις πίσω στο εγχειρίδιο που μελετάς...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.