bettina Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 εχω μια εργασια σε C και δεν μπορω να περασω λεξη (δηλ.περισσοτερους απο εναν χαρακτηρες) σε μια λιστα...μου περναει μονο τον πρωτο χαρακτηρα απο αυτους που του δινω ΚΩΔΙΚΑΣ struct mathitisType { char *name; struct mathitisType *next; struct mathitisType *previous; }; typedef struct mathitisType Mathitis; int main() { char *onoma; Mathitis *temp=(Mathitis*)malloc(sizeof(Mathitis)); printf("Enter the name"); scanf ("%s",onoma); temp->name =onoma; temp->next =student->tail; temp->previous=student->tail->previous; printf("output "); printf("%c", temp->name); }
macabre_sunsets Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 Νομίζω ότι πρέπει να δηλώσεις το char σαν array (char *name[]). Τωρα δεν ξέρω/θυμάμαι αν μπορείς να το αφήσεις χωρίς μήκος το array ή πρέπει να του βάλεις κάτι. Επίσης, θα σου πρότεινα να αποδεσμέυσεις την μνήμη που δέσμευσες με την malloc, χρησιμοποιώντας την "free" [free(temp)].
Aesmade Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 macabre_sunsets: Aυτό θα έφτιαχνε array δύο διαστάσεων. Νομίζω ήθελες να πεις name[]. Είτε αυτό, ή κάνε malloc για τα char*, αφού από μόνα τους είναι μόνο pointers. Απορώ πως δεν σου έδωσε access violation. Επίσης, άμα κάνεις temp->name =onoma το temp->name δείχνει στην ίδια διεύθυνση με το onoma, οπότε αν το αλλάξεις αλλάζει και το temp->name. Αν έχεις πολλά Mathitis structs τότε όποτε αλλάζεις το onoma θα αλλάζουν όλα. Και στο τέλος λες printf("%c", temp->name). Mήπως εννοείς %s;
bettina Δημοσ. 1 Νοεμβρίου 2008 Μέλος Δημοσ. 1 Νοεμβρίου 2008 thanks το εκανα αυτο...εχω ομως αλλο προβλημα τωρα... θελω να περασω σε μια λιστα κατι βαθμους...οταν περναω περισσοτερους απο εναν βαθμους στην εμφανιση φαινεται μονο ο τελευταιος που εχω δωσει κατι δεν κανω καλα με την ενωση αλλα τι???any ideas...again??? ΚΩΔΙΚΑΣ: struct GradeType { int mathCode; int mathGrade; struct GradeType *next; struct GradeType *previous; }; typedef struct GradeType Grade; main() { Grade *temp1=(Grade*)malloc(sizeof(Grade)); printf("enter\n" "1. gia na doseis arithmo mathimatwn:\n" "2. exit...\n"); scanf("%d", &num); while ( num!=2) { temp1->mathCode; temp1->next=grade->tail1; temp1->previous=grade->tail1->previous; grade->tail1->previous->next=temp1; grade->tail1->previous=temp1; printf("Dose kodiko mathimatos: "); scanf("%d",&kodikosMath); temp1->mathCode=kodikosMath; temp1->next=grade->tail1; temp1->previous=grade->tail1->previous; grade->tail1->previous->next=temp1; grade->tail1->previous=temp1; printf("dose vathmo: "); scanf("%d",&vathmos); temp1->mathGrade=vathmos; temp1->next=grade->tail1; temp1->previous=grade->tail1->previous; grade->tail1->previous->next=temp1; grade->tail1->previous=temp1; printf("enter\n" "1. gia na doseis arithmo mathimatwn:\n" "2. exit...\n"); scanf("%d", &num); } }
macabre_sunsets Δημοσ. 1 Νοεμβρίου 2008 Δημοσ. 1 Νοεμβρίου 2008 Aesmade γιατί θα έφτιαχνε πίνακα 2 διαστάσεων? Ο pointer από μόνος του δηλώνει πίνακα? Δεν έχω δουλέψει με pointers αρκετα
Aesmade Δημοσ. 2 Νοεμβρίου 2008 Δημοσ. 2 Νοεμβρίου 2008 Aesmade γιατί θα έφτιαχνε πίνακα 2 διαστάσεων? Ο pointer από μόνος του δηλώνει πίνακα? Δεν έχω δουλέψει με pointers αρκετα Όντως, οι arrays είναι παρόμοιες με pointers, με τη διαφορά πως δεν μπορείς να τους αλλάξεις τη διεύθυνση που δείχνουν και αν χρησιμοποιήσεις τη sizeof σε έναν pointer θα σου δώσει το μέγεθος του ίδιου του pointer, ενώ σε μια array το συνολικό μέγεθος των στοιχείων της. Μπορείς π.χ. να κάνεις > int a[3]={111,0,333}; int *b=a; b[1]=222; printf("%d %d %d\n",b[0],a[1],b[2]); και θα σου δώσει 111 222 333. Edit ~ Ξέχασα, και δεν είναι σαν τους pointers που έχουν δικιά τους διεύθυνση και μια άλλη διεύθυνση ως τιμή τους, αλλά στην δικιά τους διεύθυνση αποθηκεύονται τα στοιχεία του πίνακα. Δηλ. &a = a, αλλά &b != b.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.