taleporos09 Δημοσ. 26 Μαρτίου 2009 Δημοσ. 26 Μαρτίου 2009 Θελω να φτιαξω ενα προγραμμα σε c που θα χρησιμοποιει εναν πινακα πχ.Foods(αγνωστου αριθμου θεσεων) που θα βαζει λεξεις(φαγητα) απο τον χρηστη(οσες θελει αυτος) πχ Foods[0]=PASTITSIO,Foods[1]=MOYSAKAS κλπ... Ο αριθμος των φαγητων ειπαμε θα ειναι αγνωστος...(????) πως θα το κανω αυτο..πλζζζ χελπ ειμαι αρχαριος (βασικα με μπερδευουν και τα αλφαριθμητικα...και η μαλλοκ με την δυναμικη αναθεση μνημης...) Μπορει καποιος σας παρακαλω να μου δωσει ενα παραδειγμα...ή εστω μια υποτυπωδης λυση...εχω πελαγωσει.... Eυχαριστω εκ των προτερων
I@n15 Δημοσ. 26 Μαρτίου 2009 Δημοσ. 26 Μαρτίου 2009 Μηπως ενοοει οτι το μεγεθος του πινακα θα το οριζει μονος του ο χρηστης? π.χ int SIZE; int i; printf("dose ton arithmo fagiton:\n"); scanf("%i",&SIZE); char Foods; και μετα θα δινει ο χρηστης απ το πληκτρολογιο οσα φαγητα θελει
georgemarios Δημοσ. 26 Μαρτίου 2009 Δημοσ. 26 Μαρτίου 2009 πρεπει να ειναι C? αν επιτρεπεται να ειναι και C++ μπορεις να χρησιμοποιησεις ενα vector απο strings αλλιως πρεπει να φτιαξουμε μια custom δομη
taleporos09 Δημοσ. 26 Μαρτίου 2009 Μέλος Δημοσ. 26 Μαρτίου 2009 Μηπως ενοοει οτι το μεγεθος του πινακα θα το οριζει μονος του ο χρηστης?π.χ int SIZE; int i; printf("dose ton arithmo fagiton:\n"); scanf("%i",&SIZE); char Foods; και μετα θα δινει ο χρηστης απ το πληκτρολογιο οσα φαγητα θελει Αυτο γινεται? Μπορεις να μου πεις ακριβως πως να το κανω γτ δν ξερω απο αλφαριθμητικα? Βασικα αυτο που θελω ειναι να λεει:πχ ΠΑΣΤΙΤΣΙΟ,ΟΜΕΛΕΤΑ,ΜΑΚΑΡΟΝΙΑ, 0 και οταν δωσει 0 να σταματησει αλλα αν γινεται το 0 να μην μπει στον πινακα αν δεν γινεται αρκουμε στην παραπανω λυση... Μηπως ομως θα μπορουσες να γραψεις σε παρακαλω ανλυτικοτερα τον κωδικα πχ αν ειναι τυπου char Foods; θα μπορει να βαλει size φαγητα ή size χαακτηρες ? πρεπει να ειναι C? yeap!!! Ευχαριστω!!!
pinball_elf Δημοσ. 26 Μαρτίου 2009 Δημοσ. 26 Μαρτίου 2009 Πρόχειρο προγραμματάκι με την χρήση της malloc και realloc: > #include <stdlib.h> #include <stdio.h> #define NAME_LENGTH 256 int main(void) { char ** food_list = NULL; char input[NAME_LENGTH]; int count = 0; int i; fprintf(stderr, "new food ?:"); while (fgets(input, NAME_LENGTH-1, stdin) != NULL) { if (count == 0) { food_list = (char **)malloc(sizeof(char*)*(count+1)); } else { char ** new_food_list = NULL; new_food_list = (char **)realloc(food_list, sizeof(char*)*(count+1)); food_list = new_food_list; } food_list[count] = strdup(input); count++; for(i=0;i<count;i++) fprintf(stderr, "food_list[%d] = %s\n", i, food_list[i]); fprintf(stderr, "new food ?:"); } return 0; }
taleporos09 Δημοσ. 26 Μαρτίου 2009 Μέλος Δημοσ. 26 Μαρτίου 2009 Πρόχειρο προγραμματάκι με την χρήση της malloc και realloc: > #include <stdlib.h> #include <stdio.h> #define NAME_LENGTH 256 int main(void) { char ** food_list = NULL; char input[NAME_LENGTH]; int count = 0; int i; fprintf(stderr, "new food ?:"); while (fgets(input, NAME_LENGTH-1, stdin) != NULL) { if (count == 0) { food_list = (char **)malloc(sizeof(char*)*(count+1)); } else { char ** new_food_list = NULL; new_food_list = (char **)realloc(food_list, sizeof(char*)*(count+1)); food_list = new_food_list; } food_list[count] = strdup(input); count++; for(i=0;i<count;i++) fprintf(stderr, "food_list[%d] = %s\n", i, food_list[i]); fprintf(stderr, "new food ?:"); } return 0; } επειδη ομολογω σε εχασα καπου μηπως μπορεις να μου πεις λιγο ταχιστα τι κανει το προγραμμα, με ποιο τροπο λειτουργει? Συγγνωμη αν σε κουραζω αλλα τωρα ξεκινω το ταξιδι στον μαγικο κοσμο του προγραμματισμου...
kid4computer Δημοσ. 26 Μαρτίου 2009 Δημοσ. 26 Μαρτίου 2009 πρεπει να ειναι C?αν επιτρεπεται να ειναι και C++ μπορεις να χρησιμοποιησεις ενα vector απο strings αλλιως πρεπει να φτιαξουμε μια custom δομη Επειδή και εγώ θέλω να κάνω κάτι παρόμοιο: Θα λέει ο χρήστης τα ονόματα Χ παιδιών και εγώ θα πρέπει να τα βάζω σε ξεχωριστά X string και δεν ξέρω πως θα το κάνω με βοηθάς λίγω στην C++
pinball_elf Δημοσ. 26 Μαρτίου 2009 Δημοσ. 26 Μαρτίου 2009 > #include <stdlib.h> #include <stdio.h> #define NAME_LENGTH 256 int main(void) { char ** food_list = NULL; /* κενός πίνακας (δείκτης) από char * στοιχεία */ char input[NAME_LENGTH]; /* στοιχείο χρήστη μέγιστου μήκους ίσο με NAME_LENGTH */ int count = 0; /* πλήθος στοιχείων πίνακα food_list */ int i; fprintf(stderr, "new food ?:"); /* ερώτηση πρός τον χρήστη */ /* διάβαζε συνέχεια απο τον χρήστη strings μέγιστου μήκους NAME_LENGTH-1, και αποθήκευσε τα στην input μεταβλητή κάθε φορά */ while (fgets(input, NAME_LENGTH-1, stdin) != NULL) { if (count == 0) /* εάν είναι η πρώτη φορά, (0 στοιχεία) */ { /* κατοχύρωσε την μνήμη δυναμικά ποσότητα ίση με το μέγεθος ενός char * στοιχείου */ food_list = (char **)malloc(sizeof(char*)*(count+1)); } else { char ** new_food_list = NULL; /* ανακατοχύρωσε δυναμικά την προηγούμενη μνήμη προσθέτοντας το μέγεθος ενός επιπλέον char * στοιχείου (χωρίς να αλλάξουν τα περιεχόμενα της υπάρχουσας μνήμης) */ new_food_list = (char **)realloc(food_list, sizeof(char*)*(count+1)); food_list = new_food_list; } /* εναπόθεσε στη θέση count του πίνακα food_list το στοιχείο του χρήστη. εδώ υπάρχει μια κρυμένη malloc η οποία γίνεται (και επιστρέφεται) από την [url="http://linux.die.net/man/3/strdup"]strdup[/url] διότι ένα στοιχείο του πίνακα food_list είναι στη ουσία ένα char * */ food_list[count] = strdup(input); count++; /* άυξησε το πλήθος των στοιχείων */ /* εκτύπωσε την λίστα */ for(i=0;i<count;i++) fprintf(stderr, "food_list[%d] = %s\n", i, food_list[i]); fprintf(stderr, "new food ?:"); /* ερώτηση πρός τον χρήστη (ξανά) */ } /* στην ουσία το πρόγραμμα δεν τερματίζει ποτέ */ return 0; }
taleporos09 Δημοσ. 26 Μαρτίου 2009 Μέλος Δημοσ. 26 Μαρτίου 2009 > #include <stdlib.h> #include <stdio.h> #define NAME_LENGTH 256 int main(void) { char ** food_list = NULL; /* κενός πίνακας (δείκτης) από char * στοιχεία */ char input[NAME_LENGTH]; /* στοιχείο χρήστη μέγιστου μήκους ίσο με NAME_LENGTH */ int count = 0; /* πλήθος στοιχείων πίνακα food_list */ int i; fprintf(stderr, "new food ?:"); /* ερώτηση πρός τον χρήστη */ /* διάβαζε συνέχεια απο τον χρήστη strings μέγιστου μήκους NAME_LENGTH-1, και αποθήκευσε τα στην input μεταβλητή κάθε φορά */ while (fgets(input, NAME_LENGTH-1, stdin) != NULL) { if (count == 0) /* εάν είναι η πρώτη φορά, (0 στοιχεία) */ { /* κατοχύρωσε την μνήμη δυναμικά ποσότητα ίση με το μέγεθος ενός char * στοιχείου */ food_list = (char **)malloc(sizeof(char*)*(count+1)); } else { char ** new_food_list = NULL; /* ανακατοχύρωσε δυναμικά την προηγούμενη μνήμη προσθέτοντας το μέγεθος ενός επιπλέον char * στοιχείου (χωρίς να αλλάξουν τα περιεχόμενα της υπάρχουσας μνήμης) */ new_food_list = (char **)realloc(food_list, sizeof(char*)*(count+1)); food_list = new_food_list; } /* εναπόθεσε στη θέση count του πίνακα food_list το στοιχείο του χρήστη. εδώ υπάρχει μια κρυμένη malloc η οποία γίνεται (και επιστρέφεται) από την [url="http://linux.die.net/man/3/strdup"]strdup[/url] διότι ένα στοιχείο του πίνακα food_list είναι στη ουσία ένα char * */ food_list[count] = strdup(input); count++; /* άυξησε το πλήθος των στοιχείων */ /* εκτύπωσε την λίστα */ for(i=0;i<count;i++) fprintf(stderr, "food_list[%d] = %s\n", i, food_list[i]); fprintf(stderr, "new food ?:"); /* ερώτηση πρός τον χρήστη (ξανά) */ } /* στην ουσία το πρόγραμμα δεν τερματίζει ποτέ */ return 0; } thanx φιλε η βοηθεια σου ηταν υπερπολιτιμη...
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.