Εξαιρετικο περιεχομενο.. ως φοιτητης ημμυ του παν Θεσσαλιας τα βιντεο υπηρξαν ιδιαιτερη βοηθεια.. Θα ηθελα ομως να υπηρχε και κατι αναλογο για λιστες κτλ κτλ
Καλησπερα και ευχαριστω το κ Δημητρη για τα μαθηματα C ,εχω μια απορεια ,ο παρακατω κωδικας ενω φαινετε σωστος δε δουλευει καθως η εξοδος ειναι η εξης (H μαιν ,η print_record και η struct ειναι ιδιες με τη μονη διαφορα οτι ο αριθμος ειναι σε int , χρησιμοποιω scanf και gets για πειραματισμο και απο οτι φαινετε εκει δημιουργείτε το προβλημα,αμα βαλω μονο scanf η μονο gets δουλευει κανονικα) Κωδικας : void read_record(record *p) { printf(" Dwse onoma :"); gets(p->onoma); printf(" Dwse diefthinsi :"); scanf("%s", p->diefthinsi); printf(" Dwse arithmo katoikias :"); scanf("%d", &p->arithmos); printf(" Dwse nomo :"); gets(p->nomos); } Εξοδος: Dwse onoma :XRISTOS Dwse diefthinsi :AGIU Dwse arithmo katoikias :8 Dwse nomo : XRISTOS : AGIU 8
Καλησπέρα κύριε Δημήτρη . Η απορία μου έγκειται στο p->onoma μέσα στη scanf , και σε όλα της ίδιας κατάστασης . Γιατί βάζουμε scanf("%s", p->onoma) και δεν βάζουμε scanf("%s",&p->onoma) όπως είχαμε κάνει στο προηγούμενο παράδειγμα ; Εμένα όταν τα τρέχω και τα 2 σωστά μου τα βγάζει ( DEV C++ WINDOWS )
Γεια σου Θεοφάνη, θυμίσου από προηγούμενα μαθήματα ότι: όταν διαβάζουμε συνήθης τύπους (π.χ. ακέραιος, πραγματικός, χαρακτήρας, κ.λπ.) γράφουμε π.χ. scanf("%d", &x); [δηλαδή απαιτείται να βάλουμε τη διεύθυνση της μεταβλητής] όταν όμως διαβάζουμε συμβολοσειρές, γράφουμε π.χ. scanf("%d", x) όπου x είναι πίνακας χαρακτήρων και ξέρουμε ότι το όνομα του πίνακα είναι διεύθυνση. Γενικά θυμόμαστε λοιπον, ότι η scanf παίρνει ως 2ο όρισμα τη διεύθυνση (είναι μεταβλητή απαιτεί &, είναι πίνακας δεν πρέπει να βάλουμε &) Έτσι και σε αυτήν την άσκηση έχουμε ότι το s->onoma είναι πίνακας χαρακτήρων, άρα δεν πρέπει να βάλουμε &, ενώ στην προηγούμενη άσκηση διαβάζαμε πραγματικό και έπρεπε να βάλουμε &. ==== Εντελώς τυχαίο ότι σου δούλεψε και εντελώς μη αναμενόμενο. Γράψε τον κώδικα εδώ που χρησιμοποιει το & να τον ελέγξω περαιτέρω, μήπως υπάρχει και κάποια άλλη αλλαγή στον κώδικα που το δικαιολογεί.
καλησπερα, θα ηθελα να ρωτησω εστω ότι αφηνουμε εμεις το χρηστη να επιλεξει για πόσα ατομα θελει να τυπώσει τα στοιχεια,τι θα γραφαμε στην main? μου εμφανιζει προβλημα με τη μεταβλητη στην print record
Καλησπέρα δάσκαλε, εξαιρετικά βίντεο. Στην read_record δεν θα ηταν πιο σωστό να διαβάσουμε τα περιεχόμενα με gets αντί για scanf; Μιας και η scanf δεν θα διαβάσει όλη τη συμβολοσειρά αν ο χρήστης εισάγει κενό.
Εξαιρετικο περιεχομενο.. ως φοιτητης ημμυ του παν Θεσσαλιας τα βιντεο υπηρξαν ιδιαιτερη βοηθεια..
Θα ηθελα ομως να υπηρχε και κατι αναλογο για λιστες κτλ κτλ
Κάποια στοιχεία για Δομές Δεδομένων σε C μπορείς να βρεις εδώ:
ruclips.net/channel/UCqhE1-FJDUVJ2jG44z0gMKA
Καλησπερα και ευχαριστω το κ Δημητρη για τα μαθηματα C ,εχω μια απορεια ,ο παρακατω κωδικας ενω φαινετε σωστος δε δουλευει καθως η εξοδος ειναι η εξης (H μαιν ,η print_record και η struct ειναι ιδιες με τη μονη διαφορα οτι ο αριθμος ειναι σε int , χρησιμοποιω scanf και gets για πειραματισμο και απο οτι φαινετε εκει δημιουργείτε το προβλημα,αμα βαλω μονο scanf η μονο gets δουλευει κανονικα)
Κωδικας :
void read_record(record *p)
{
printf("
Dwse onoma :");
gets(p->onoma);
printf("
Dwse diefthinsi :");
scanf("%s", p->diefthinsi);
printf("
Dwse arithmo katoikias :");
scanf("%d", &p->arithmos);
printf("
Dwse nomo :");
gets(p->nomos);
}
Εξοδος:
Dwse onoma :XRISTOS
Dwse diefthinsi :AGIU
Dwse arithmo katoikias :8
Dwse nomo :
XRISTOS : AGIU 8
Καλησπέρα κύριε Δημήτρη . Η απορία μου έγκειται στο p->onoma μέσα στη scanf , και σε όλα της ίδιας κατάστασης . Γιατί βάζουμε scanf("%s", p->onoma) και δεν βάζουμε scanf("%s",&p->onoma) όπως είχαμε κάνει στο προηγούμενο παράδειγμα ; Εμένα όταν τα τρέχω και τα 2 σωστά μου τα βγάζει ( DEV C++ WINDOWS )
Γεια σου Θεοφάνη, θυμίσου από προηγούμενα μαθήματα ότι:
όταν διαβάζουμε συνήθης τύπους (π.χ. ακέραιος, πραγματικός, χαρακτήρας, κ.λπ.)
γράφουμε π.χ. scanf("%d", &x); [δηλαδή απαιτείται να βάλουμε τη διεύθυνση της μεταβλητής]
όταν όμως διαβάζουμε συμβολοσειρές, γράφουμε π.χ. scanf("%d", x) όπου x είναι πίνακας χαρακτήρων και ξέρουμε ότι το όνομα του πίνακα είναι διεύθυνση.
Γενικά θυμόμαστε λοιπον, ότι η scanf παίρνει ως 2ο όρισμα τη διεύθυνση (είναι μεταβλητή απαιτεί &, είναι πίνακας δεν πρέπει να βάλουμε &)
Έτσι και σε αυτήν την άσκηση έχουμε ότι το s->onoma είναι πίνακας χαρακτήρων, άρα δεν πρέπει να βάλουμε &, ενώ στην προηγούμενη άσκηση διαβάζαμε πραγματικό και έπρεπε να βάλουμε &.
====
Εντελώς τυχαίο ότι σου δούλεψε και εντελώς μη αναμενόμενο. Γράψε τον κώδικα εδώ που χρησιμοποιει το & να τον ελέγξω περαιτέρω, μήπως υπάρχει και κάποια άλλη αλλαγή στον κώδικα που το δικαιολογεί.
καλησπερα, θα ηθελα να ρωτησω εστω ότι αφηνουμε εμεις το χρηστη να επιλεξει για πόσα ατομα θελει να τυπώσει τα στοιχεια,τι θα γραφαμε στην main? μου εμφανιζει προβλημα με τη μεταβλητη στην print record
Γεια σου Μαρία, δεν μου είναι κατανοητό το πρόβλημα που αναφέρεις, γράψε μου ακριβώς τον κώδικα που γράφεις
Καλησπέρα δάσκαλε, εξαιρετικά βίντεο. Στην read_record δεν θα ηταν πιο σωστό να διαβάσουμε τα περιεχόμενα με gets αντί για scanf; Μιας και η scanf δεν θα διαβάσει όλη τη συμβολοσειρά αν ο χρήστης εισάγει κενό.
Γεια σου τέκνον, σωστό είναι αυτό που λες, εφόσον θέλουμε να είναι ονοματεπώνυμο και να έχει κενά, η gets είναι προτιμότερη.
Δάσκαλε όταν τρέχω το συγκεκριμένο πρόγραμμα μου βγάζει [error] Id returned 1 exit status
#include
#include
#define N 80
struct person{
char onoma[N];
char diefthinsi[N];
char arithmos[N];
char nomos[N];
};
typedef struct person RECORD;
void read_record(RECORD *p);
void print_record(RECORD k);
main()
{
RECORD stratos;
RECORD vaggos;
printf("Stratos:
");
read_record(&stratos);
printf("Vaggos:
");
read_record(&vaggos);
print_record(stratos);
print_record(vaggos);
}
void read_RECORD(RECORD *p)
{
printf("Dwse to onoma sou: ");
scanf("%s",p->onoma);
printf("Dwse tin diefthinsi sou: ");
scanf("%s",p->diefthinsi);
printf("Dwse ton arithmo tou spitious sou: ");
scanf("%s",p->arithmos);
printf("Dwse ton nomo pou meneis: ");
scanf("%s",p->nomos);
}
void print_record(RECORD k)
{
printf("
Onoma: %s",k.onoma);
printf("
Diefthinsi: %s",k.diefthinsi);
printf("
Arithmos: %s",k.arithmos);
printf("
Nomos: %s",k.nomos);
}
ΕΙΝΑΙ ΣΧΕΔΟΝ ΤΟ ΙΔΙΟ ΠΡΟΓΑΜΜΑ ΜΕ ΤΟ ΔΙΚΟ ΣΑΣ
εχεις το ονομα της συνάρτησης διαφορετικό στις δύο μεριές:
print_record
print_RECORD
@@psounis ποποποοοοο ευχαριστώ πολύ καλημέρα