geodark Δημοσ. 27 Νοεμβρίου 2013 Δημοσ. 27 Νοεμβρίου 2013 Εχω 3 πινακες. books[size1-1][121], users[size2-1][21], ratings[size2-1][size1-1] Στην αρχη του προγραμματος φυσικα κανω define SIZE1,SIZE2 αναλογα τι θελω. Το θεμα που προκυπτει εχει να κανει με τους πινακες users,ratings Καθε φορα μετα την εκτελεση του προγραμματος εξαφανιζεται η θεση που αποθηκευτε το ονομα του user1. Δηλαδη η θεση users[0][0] και ο ratings οταν τον εκτυπωνω βγαζει αλλα ντ'αλλον σε σχεση με αυτα που του εχω δωσει. Για πχ οταν SIZE1=3 και SIZE2=5 και δινω σαν users τα u1,u2,...,u5 και τις ιδιες βαθμολογιες καθε φορα 1,2,3 οταν κανω εκτυπωση των αποτελεσματων μου βγαζει αυτα. (Το 3 στην 1η γραμμη ειναι ασχετο, απο κατι αλλα που εκανα στο terminal.) Με τον gdb που προσπαθησα να βρω το λαθος βρηκα πως το προβλημα με τον user1 γινεται ακριβως την στιγμη που τελειωνει το διαβασμα των ratings, στην τελευταια ακριβως επαναληψη με το που βγει απο το loop και ελεγχει i<SIZE2 για τελευταια φορα, τοτε αλλαζει και ο user1. Εχω σκαλωσει και δεν μπορω να δω κατι?? for(i=0; i<SIZE1; i++){ printf("give book name\n"); /*gia dokimh*/ scanf("%120s", &books[i][0]); printf("book%d = %s\n", i+1, books[i]); /*gia dokimh*/ } for(i=0; i<SIZE2; i++){ printf("give user name\n"); /*gia dokimh*/ scanf("%20s", users[i]); printf("give ratings\n"); /*gia dokimh*/ for(j=0; j<SIZE1; j++){ scanf("%d", &ratings[i][j]); printf("%d", ratings[i][j]); } } /*ακολουει κωδικας για εκτυπωση των πινακων*/ for(i=0; i<SIZE2; i++){ printf("user%d = %s\n", i+1, users[i]); /* gia dokimh*/ } for(i=0; i<SIZE2; i++){ for(j=0; j<SIZE1; j++){ printf("%d", ratings[i][j]); } }
bird Δημοσ. 27 Νοεμβρίου 2013 Δημοσ. 27 Νοεμβρίου 2013 Όρισε τους πίνακες σου σαν char books[SIZE1][121], users[SIZE2][21]; int ratings[SIZE2][SIZE1]; Οι λούπες εκτελούνται size1 και size2 φορές κι όχι size1-1 και size2-1. Επίσης το παρακάτω μου δουλεύει κανονικά... #include <stdio.h> #define SIZE1 3 #define SIZE2 5 int main (void) { int i,j; char users[SIZE2][21]; int ratings[SIZE2][SIZE1]; for(i=0; i<SIZE2; i++){ printf("give user name: "); /*gia dokimh*/ scanf("%20s",users[i]); printf("give ratings: "); /*gia dokimh*/ for(j=0; j<SIZE1; j++){ scanf("%d", &ratings[i][j]); printf("%d\n", ratings[i][j]); } } /*ακολουει κωδικας για εκτυπωση των πινακων*/ for(i=0; i<SIZE2; i++){ printf("user%d = %s\n", i+1, users[i]); /* gia dokimh*/ } for(i=0; i<SIZE2; i++){ for(j=0; j<SIZE1; j++){ printf("%d", ratings[i][j]); } } return 0; } Αν παρατήρησες ούτε τα ratings στα διάβαζε σωστά...
geodark Δημοσ. 27 Νοεμβρίου 2013 Μέλος Δημοσ. 27 Νοεμβρίου 2013 Ναι αλλα χωρις το -1 δημιουργεις πινακα με 1 παραπανω σειρα την οποια δεν χρησιμοποιεις αφου η αριθμιση του πινακα ξεκινα απο το 0. Όλως περιέργως δουλεύει και σε μένα σαν ξεχωριστο προγραμμα, κατι παιζει...
bird Δημοσ. 28 Νοεμβρίου 2013 Δημοσ. 28 Νοεμβρίου 2013 Όταν ορίζεις έναν πίνακα users[5] σημαίνει ότι έχει 5 θέσεις. users[0], users[1], users[2], users[3], users[4]. Άρα στη δήλωσή του, πρέπει να μπει κανονικά ο αριθμός. Μετά στο loop η μεταβλητή σου πηγαίνει από 0 εως και SIZE-1 και για αυτό βάζεις ι < SIZE...
geodark Δημοσ. 28 Νοεμβρίου 2013 Μέλος Δημοσ. 28 Νοεμβρίου 2013 AAAAAAAAAAA... και πηγαινει και γραφει προφανως οπου να ναι!?
bird Δημοσ. 28 Νοεμβρίου 2013 Δημοσ. 28 Νοεμβρίου 2013 AAAAAAAAAAA... και πηγαινει και γραφει προφανως οπου να ναι!? Α γειά σου
geodark Δημοσ. 28 Νοεμβρίου 2013 Μέλος Δημοσ. 28 Νοεμβρίου 2013 Ειχα φαει σκαλωμα και ξεχασα τα βασικα GOD DAMMIT!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα