Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Εχω 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 οταν κανω εκτυπωση των αποτελεσματων μου βγαζει αυτα.

HBVYCGt.png(Το 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]);
		}
	}
Δημοσ.

Όρισε τους πίνακες σου σαν

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 στα διάβαζε σωστά...

Δημοσ.

Ναι αλλα χωρις το -1 δημιουργεις πινακα με 1 παραπανω σειρα την οποια δεν χρησιμοποιεις αφου η αριθμιση του πινακα ξεκινα απο το 0. Όλως περιέργως δουλεύει και σε μένα σαν ξεχωριστο προγραμμα, κατι παιζει...

Δημοσ.

Όταν ορίζεις έναν πίνακα users[5] σημαίνει ότι έχει 5 θέσεις. users[0], users[1], users[2], users[3],  users[4].

Άρα στη δήλωσή του, πρέπει να μπει κανονικά ο αριθμός. Μετά στο loop η μεταβλητή σου πηγαίνει από 0 εως και SIZE-1 και για αυτό βάζεις ι < SIZE...

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...