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

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

Δημοσ.

Καλησπέρα!

 

κανα 2 απορίες όποιος ξέρει...!

 

--Όταν σου χτυπάνε error εξαιρέσεις κατα τη διάρκει που τρέχει κανονικά το πρόγραμμα πως αναγνωρίζεις που είναι το λάθος?

 

errors/warnings δε μου βγάζει πουθενα στο συντακτικό οπότε καταλαβαίνω κάπου έχω κάνει :X στη λογική..

 

πάνω σε Visual Studio είναι το πρόγραμμα..

 

--Αν θες να φτιάξεις ένα ημερολογιακό πρόγραμμα εβδομάδας με μέρες ώρες ώστε να δημιουργείς 1 αρχείο στο οποίο θα καταχωρούνται στοιχεία για τη συγκεκριμένη ώρα συγκεκριμένη μερα κτλ κτλ...

 

Πως το κάνεις??

 

δεν νομίζω η μόνη λύση να είναι ένας πολυδιάστατος πίνακας που σκέφτηκα εγω :P

Δημοσ.

Καλησπέρα!

 

κανα 2 απορίες όποιος ξέρει...!

 

--Όταν σου χτυπάνε error εξαιρέσεις κατα τη διάρκει που τρέχει κανονικά το πρόγραμμα πως αναγνωρίζεις που είναι το λάθος?

 

errors/warnings δε μου βγάζει πουθενα στο συντακτικό οπότε καταλαβαίνω κάπου έχω κάνει :X στη λογική..

 

δεν νομίζω η μόνη λύση να είναι ένας πολυδιάστατος πίνακας που σκέφτηκα εγω :P

 

Έχεις βάλει break points στον κώδικα?

Δημοσ.

...

--Αν θες να φτιάξεις ένα ημερολογιακό πρόγραμμα εβδομάδας με μέρες ώρες ώστε να δημιουργείς 1 αρχείο στο οποίο θα καταχωρούνται στοιχεία για τη συγκεκριμένη ώρα συγκεκριμένη μερα κτλ κτλ...

 

Πως το κάνεις??

 

δεν νομίζω η μόνη λύση να είναι ένας πολυδιάστατος πίνακας που σκέφτηκα εγω :P

Υπάρχουν διάφοροι τρόποι. Η 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 ή όχι) αλλά ελπίζω να σε βοηθήσει να πάρεις μια γενική ιδέα.

Δημοσ.

Δεν ειναι τιποτα το περιπλοκο δες εδω στο 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 ή όχι) αλλά ελπίζω να σε βοηθήσει να πάρεις μια γενική ιδέα.

 

νομίζω πως ναι πήρα μια ιδέα πως να το φτιάξω.. αλλά για να το δοκιμάσω μάλλον πρέπει να φτιαχτεί το προηγούμενο για να αρχίσω δοκιμές.. :/

Δημοσ.

...

νομίζω πως ναι πήρα μια ιδέα πως να το φτιάξω.. αλλά για να το δοκιμάσω μάλλον πρέπει να φτιαχτεί το προηγούμενο για να αρχίσω δοκιμές.. :/

Κάνε έναν κόπο και πόσταρε εδώ τον κώδικα μέσα σε spoiler & code tags (δλδ. [ spoiler ] [ code ] ... [/ code] [ /spoiler ], χωρίς κενά μέσα στις αγκύλες) καθώς επίσης και τα errors που σου βγάζει ο compiler (σε ξεχωριστό [ spoiler ] [/ spoiler ] section).

Δημοσ.

Είναι μεγάλος ο κώδικας..

 

Είναι πάνω σε Visual Studio 10

 

θα το βρεις ένα test αρχείο με απόσπασμα απο το κώδικα που βγάζει το ίδιο error εδω .

τα error τα ανέβασα με printscreen παραπάνο.. :/

Δημοσ.

Δυστυχώς δεν χρησιμοποιώ VS, οπότε δεν το έχω καν installed. Ελπίζω να σε βοηθήσει κάποιος άλλος που να ασχολείται με VS (ή αν επείγεσαι , πέρασε τον κώδικα και σε κάποιο άλλο IDE που να χρησιμοποιεί gcc ώστε να διευρύνεις το κοινό που απευθύνεσαι).

Δημοσ.

ένα καλό.. ασχολήθηκα με τα break points που μου πρότειναν τα παιδιά παραπάνω (ευχαριστώ παπι ^_^).. και κολλάει ακριβώς με το που γυρνάει πίσω στη main τις συναρτήσεις.. το γιατί το ψάχνω ακόμα βέβαια αλλά έμαθα μάλλον το που είναι το πρόβλημα...

 

αν ήταν στο χέρι μου θα το έγραφα σε devc++ αλλά είναι προαπαίτηση το visual.. δεν είχα λόγο να βάλω τον εαυτό μου σε τέτοια ταλαιπωρία να μάθω το visual!!:P

Δημοσ.

Το προβλημα στο πεταει το 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

Δημοσ.

δεν έτρεξε ποτέ...:( έβαλα το κώδικα μέσα και επέλεξα τις συγκεκρημένη συνάρτηση για εμφάνιση αλλά μόλις δίνω τον αριθμό μητρώου παγώνει και όταν κάνω καταχώρηση μαθητή δεν το κάνει ποτέ... δε κάνει break to debug αλλά τι κάνω??

επίσης το όλο friend είναι η πρώτη φορά που το βλέπω οπότε θα θελα και λίγες πληροφορίες για να το ψάξω και να το διαβάσω!

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

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

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

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

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

Σύνδεση

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

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