yincyun Δημοσ. 23 Μαΐου 2012 Δημοσ. 23 Μαΐου 2012 Καλησπέρα! κανα 2 απορίες όποιος ξέρει...! --Όταν σου χτυπάνε error εξαιρέσεις κατα τη διάρκει που τρέχει κανονικά το πρόγραμμα πως αναγνωρίζεις που είναι το λάθος? errors/warnings δε μου βγάζει πουθενα στο συντακτικό οπότε καταλαβαίνω κάπου έχω κάνει στη λογική.. πάνω σε Visual Studio είναι το πρόγραμμα.. --Αν θες να φτιάξεις ένα ημερολογιακό πρόγραμμα εβδομάδας με μέρες ώρες ώστε να δημιουργείς 1 αρχείο στο οποίο θα καταχωρούνται στοιχεία για τη συγκεκριμένη ώρα συγκεκριμένη μερα κτλ κτλ... Πως το κάνεις?? δεν νομίζω η μόνη λύση να είναι ένας πολυδιάστατος πίνακας που σκέφτηκα εγω
Tmark Δημοσ. 23 Μαΐου 2012 Δημοσ. 23 Μαΐου 2012 Καλησπέρα! κανα 2 απορίες όποιος ξέρει...! --Όταν σου χτυπάνε error εξαιρέσεις κατα τη διάρκει που τρέχει κανονικά το πρόγραμμα πως αναγνωρίζεις που είναι το λάθος? errors/warnings δε μου βγάζει πουθενα στο συντακτικό οπότε καταλαβαίνω κάπου έχω κάνει στη λογική.. δεν νομίζω η μόνη λύση να είναι ένας πολυδιάστατος πίνακας που σκέφτηκα εγω Έχεις βάλει break points στον κώδικα?
παπι Δημοσ. 23 Μαΐου 2012 Δημοσ. 23 Μαΐου 2012 break points?? μιλάς με αρχάριο! Δεν ειναι τιποτα το περιπλοκο δες εδω στο fabulous blog μου http://tsokanoki.blogspot.com/2010/09/debugging.html Αν μαθεις τα breakpoints θα σε βοηθησουν απιστευτα
nplatis Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 Επίσης μια καλή αρχή είναι να μας πεις τι σφάλματα σου βγάζει (copy paste από το Visual Studio).
migf1 Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 ... --Αν θες να φτιάξεις ένα ημερολογιακό πρόγραμμα εβδομάδας με μέρες ώρες ώστε να δημιουργείς 1 αρχείο στο οποίο θα καταχωρούνται στοιχεία για τη συγκεκριμένη ώρα συγκεκριμένη μερα κτλ κτλ... Πως το κάνεις?? δεν νομίζω η μόνη λύση να είναι ένας πολυδιάστατος πίνακας που σκέφτηκα εγω Υπάρχουν διάφοροι τρόποι. Η C++ σου παρέχει κι έτοιμα containers που μπορούν να καλύψουν ποικιλία αναγκών. Σε γενικές γραμμές χρειάζεσαι ένα struct για την αποθήκευση των στοιχείων κι από εκεί και πέρα μπορείς να το ενσωματώσεις ως element πινάκων, λιστών, δέντρων ή όπως αλλιώς αποφασίσεις να υλοποιήσεις το ημερολόγιο. Σε σκέτη C, ένα υπεραπλουστευμένο παράδειγμα για έναν μήνα που υλοποιείται ως πίνακας ημερών, θα μπορούσε να πηγαίνει κάπως έτσι ... > typedef struct Data { /* εδώ τα πεδία των data που θέλεις να αποθηκεύονται σε κάθε ημέρα */ } Data; ... int main( void ) { int d=0, m=0, y=0; int mdays[ ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 }; Data *month = NULL; ... /* read date here (d, m, y) */ /* validate date here */ ... month = calloc( (ISLEAP(y) && 1 == m) ? 29 : mdays[m], sizeof(Data) ); // allocate mem for month if ( !month ) { /* handle out of memory here */ } /* read data of month[d] here */ /* insert the month in your Calendar here */ ... free( month ); return 0; } Ο παραπάνω κώδικας είναι INEFFICENT (π.χ. δεσμεύει μνήμη για όλες τις ημέρες του month, άσχετα αν έχουν data ή όχι) αλλά ελπίζω να σε βοηθήσει να πάρεις μια γενική ιδέα.
yincyun Δημοσ. 24 Μαΐου 2012 Μέλος Δημοσ. 24 Μαΐου 2012 Δεν ειναι τιποτα το περιπλοκο δες εδω στο fabulous blog μου http://tsokanoki.blo.../debugging.html Αν μαθεις τα breakpoints θα σε βοηθησουν απιστευτα Δηλαδή προχωράς μέσα στο πρόγραμμα βήμα βήμα καθώς τρέχει και βλέπεις που ακριβώς χτυπάει error!! καλό! θα το δοκιμάσω!! Επίσης μια καλή αρχή είναι να μας πεις τι σφάλματα σου βγάζει (copy paste από το Visual Studio). ισχύει sorry! καθώς πάω να δημιουργήσω πχ ένα πρόσωπο και να το αποθηκεύσω στο αρχείο....error!! και στο vs μου ανοίγει ενα παράθυρο με κώδικα και μου δείχνει αυτό... Υπάρχουν διάφοροι τρόποι. Η C++ σου παρέχει κι έτοιμα containers που μπορούν να καλύψουν ποικιλία αναγκών. Σε γενικές γραμμές χρειάζεσαι ένα struct για την αποθήκευση των στοιχείων κι από εκεί και πέρα μπορείς να το ενσωματώσεις ως element πινάκων, λιστών, δέντρων ή όπως αλλιώς αποφασίσεις να υλοποιήσεις το ημερολόγιο. Σε σκέτη C, ένα υπεραπλουστευμένο παράδειγμα για έναν μήνα που υλοποιείται ως πίνακας ημερών, θα μπορούσε να πηγαίνει κάπως έτσι ... > typedef struct Data { /* εδώ τα πεδία των data που θέλεις να αποθηκεύονται σε κάθε ημέρα */ } Data; ... int main( void ) { int d=0, m=0, y=0; int mdays[ ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30, 31 }; Data *month = NULL; ... /* read date here (d, m, y) */ /* validate date here */ ... month = calloc( (ISLEAP(y) && 1 == m) ? 29 : mdays[m], sizeof(Data) ); // allocate mem for month if ( !month ) { /* handle out of memory here */ } /* read data of month[d] here */ /* insert the month in your Calendar here */ ... free( month ); return 0; } Ο παραπάνω κώδικας είναι INEFFICENT (π.χ. δεσμεύει μνήμη για όλες τις ημέρες του month, άσχετα αν έχουν data ή όχι) αλλά ελπίζω να σε βοηθήσει να πάρεις μια γενική ιδέα. νομίζω πως ναι πήρα μια ιδέα πως να το φτιάξω.. αλλά για να το δοκιμάσω μάλλον πρέπει να φτιαχτεί το προηγούμενο για να αρχίσω δοκιμές.. :/
migf1 Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 ... νομίζω πως ναι πήρα μια ιδέα πως να το φτιάξω.. αλλά για να το δοκιμάσω μάλλον πρέπει να φτιαχτεί το προηγούμενο για να αρχίσω δοκιμές.. :/ Κάνε έναν κόπο και πόσταρε εδώ τον κώδικα μέσα σε spoiler & code tags (δλδ. [ spoiler ] [ code ] ... [/ code] [ /spoiler ], χωρίς κενά μέσα στις αγκύλες) καθώς επίσης και τα errors που σου βγάζει ο compiler (σε ξεχωριστό [ spoiler ] [/ spoiler ] section).
yincyun Δημοσ. 24 Μαΐου 2012 Μέλος Δημοσ. 24 Μαΐου 2012 Είναι μεγάλος ο κώδικας.. Είναι πάνω σε Visual Studio 10 θα το βρεις ένα test αρχείο με απόσπασμα απο το κώδικα που βγάζει το ίδιο error εδω . τα error τα ανέβασα με printscreen παραπάνο.. :/
migf1 Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 Δυστυχώς δεν χρησιμοποιώ VS, οπότε δεν το έχω καν installed. Ελπίζω να σε βοηθήσει κάποιος άλλος που να ασχολείται με VS (ή αν επείγεσαι , πέρασε τον κώδικα και σε κάποιο άλλο IDE που να χρησιμοποιεί gcc ώστε να διευρύνεις το κοινό που απευθύνεσαι).
yincyun Δημοσ. 24 Μαΐου 2012 Μέλος Δημοσ. 24 Μαΐου 2012 ένα καλό.. ασχολήθηκα με τα break points που μου πρότειναν τα παιδιά παραπάνω (ευχαριστώ παπι ).. και κολλάει ακριβώς με το που γυρνάει πίσω στη main τις συναρτήσεις.. το γιατί το ψάχνω ακόμα βέβαια αλλά έμαθα μάλλον το που είναι το πρόβλημα... αν ήταν στο χέρι μου θα το έγραφα σε devc++ αλλά είναι προαπαίτηση το visual.. δεν είχα λόγο να βάλω τον εαυτό μου σε τέτοια ταλαιπωρία να μάθω το visual!!
παπι Δημοσ. 24 Μαΐου 2012 Δημοσ. 24 Μαΐου 2012 Το προβλημα στο πεταει το string. Εσυ το κανεις dump οπως ειναι και μετα το ανακτας. Η κλαση string ομως ειναι object δηλαδη εχει συγκεκριμενο lifetime με συγκεκριμενο στιγμιοτυπο. Ναι μεν δουλευει, αλλα αυτο εχει να κανει με το τροπο που δουλευει η κλαση string, πχ αν βαλεις string μεγαλυτερο απο 16byte (αν δε κανω λαθος) τοτε ουτε καν θα σου εκτυπωνε επειδη αλλαζει η συμπεριφορα του string. Τεσπα, πρεπει να αλλαξεις τον τροπο με τον οποιο αποθηκευεις string. Πχ ενα παραδειγμα με overload ostream/istream operators class BaceFace *.h >#pragma once #include "stdafx.h" //**************************************************************** // BaceFace.h //**************************************************************** //arxi klasis class BaceFace{ protected: int am; string name; string surname; double phone; string address; int CourcesNum; public: BaceFace(const int ,const string ,const string ,const double ,const string ,const int ); BaceFace(const BaceFace &); BaceFace & operator = (const BaceFace & ); BaceFace(); virtual ~BaceFace(); ..... friend std::istream& operator >>(std::istream& is,BaceFace& obj) { is>>obj.address; is>>obj.am; is>>obj.CourcesNum; is>>obj.name; is>>obj.phone; is>>obj.surname; return is; } friend std::ostream& operator <<(std::ostream& os,BaceFace& obj) { return os <<obj.address<<" " <<obj.am<<" " <<obj.CourcesNum<<" " <<obj.name<<" " <<obj.phone<<" " <<obj.surname<<" "; } };//class ends here studen.cpp > void display_sp_students(int n) { Student st; ifstream inFile; inFile.open("student.dat",ios::binary); if(!inFile) { cout<<"To arxeio den uparxei !! Piese opoiodipote pliktro..."; cin.ignore(); cin.get(); return; } bool flag=false; /* while(inFile.read(reinterpret_cast<char *> (&st), sizeof(Student))) */ while(!inFile.eof()) { inFile>>st; if(st.getAmStudent()==n) { st.ShowDataStudent(); flag=true; } } inFile.close(); if(flag==false) cout<<"\n\nto arxeio den uparxei"; cin.ignore(); cin.get(); } >void write_student() { Student st; ofstream outFile; outFile.open("student.dat",ios::binary|ios::app); st.create_student(); /* outFile.write(reinterpret_cast<char *> (&st), sizeof(Student)); */ outFile<<st; outFile.close(); cout << "\n\nArxeio ma8iti dimiourgi8ike. "; cin.ignore(); cin.get(); } Βεβαια μπορεις να το κανεις με αλλη τεχνικη, αλλα το θεμα ειναι να μην κανεις dump objects
yincyun Δημοσ. 25 Μαΐου 2012 Μέλος Δημοσ. 25 Μαΐου 2012 δεν έτρεξε ποτέ... έβαλα το κώδικα μέσα και επέλεξα τις συγκεκρημένη συνάρτηση για εμφάνιση αλλά μόλις δίνω τον αριθμό μητρώου παγώνει και όταν κάνω καταχώρηση μαθητή δεν το κάνει ποτέ... δε κάνει break to debug αλλά τι κάνω?? επίσης το όλο friend είναι η πρώτη φορά που το βλέπω οπότε θα θελα και λίγες πληροφορίες για να το ψάξω και να το διαβάσω!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα