Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

διάφορα προβλήματα με το προγραμμά μου... :( (C++)

Îåêßíçóå áðü ôï ìÝëïò spooky. Τελευταία δημοσίευση από το μέλος spooky στις 10-01-2007, 23:06. Υπάρχουν 13 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  10-01-2007, 15:14 23321

    Sleep [|-)] διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    Καλησπέρα σε όλους!
    Εδώ κ λίγο καιρό φτιάχνω ένα σχετικά γελείο πρόγραμμα σε C++ :) για το σχολείο μου,το οποίο βγάζει την τελική βαθμολογία του μαθητή.
    Το ξεκίνισα μια μέρα γιατί βαριόμουν εξωφρενικά κ δεν είχα τι να κάνω κ τώρα τελευταία είπα να το αναπτύξω λίγο...
    Επειδή δεν ξέρω κ πολλά απο databases κ πως να καλείς δεδομένα απο database αλλα κ να γράφεις σε αυτήν μέσο C++ είπα να δοκιμάσω να χρησιμοποιήσω εγραφή κ ανάγνωση σε αρχείο για την κράτηση των δεδομένων μου.Ουσιαστικά το πρόγραμμα θέλω να γράφει το όνομα του μαθητη το id του κ τους βαθμούς του :P αυτό ξέρω πως να το καταφέρω το πρόβλημα ειναι ότι πέφτω πάνω σε κάτι άκυρα τελείος errors με αποτέλεσμα να μπερδευόμαι....

    Λοίπον ξεκίνω με τα errors κ τον κόδικα μου ελπίζω να με βοιθήσετε :)
    καταρχάς δουλεύω με την DEV C++ (για compile ;) )

    1.Στο πρόγραμμα μου θέλω να επαναλαμβάνετε το menu αφού τελειώσει μια "case" δεν είξερα πως μίλισα με ενα φίλο και δοκίμασα το while κάπως έτσι:
    "while((input > 3) || (input < 1))"

    αλλα δεν κατάφερα τίποτα...

    2.
    Ένα άλλο πρόβλημα που έχω ,ενώ το πρόγραμμα εκτελείτε κανονικά αν διαλέξω την επιλογή 1 συνεχίζω στο case1 και μόλις τελειώνει η case κ έρχετε η ώρα να μου εκτυπώσει το αποτέλεσμα (στην περίπτωση μας τον βαθμό του μαθητή) το πρόγραμμα κλείνει....αυτό γήνετε κ στο case2 αν και  το αρχείο "ΜΑΤΗΙΤΕΣ.ids" δημιουργίτε κανονικά κ τα δεδομένα που έχω δώσει γράφοντε στο αρχείο κανονικά ,μόνο που γράφοντε χωρίς κενό κ αυτό με προβληματίζει......δλδ βλέπω κάτι σαν

    "PavloudisZisis115.17.1814" κ λοιπα....

    3.
    Κ το τελευτέο που έχω πλέον αγανακτίσει!!!είναι ότι όταν παώ να βάλω μια τρίτη case μου βγάζει error σαν και αυτό

    "110 c:\dev-c_~1\vathpr~1\vath2.cpp
     case label `3' within scope of cleanup or variable array
    "
    δίνω κάτι τέτοιο για παράδηγμα :
    'case 3:
    cout <<"eleos";
    break'

    επείσης μου βγάζει κ κάτι warnings περι το αρχείο mathites.ids που γράφει το πρόγραμμα....

    αν δεν είχα τόσα πολλά προβλήματα θα συνέχιζα το πρόγραμμα κ θα το έκανα να διαβάζει δεδομένα απο το αρχείο mathites.ids αλλα κόλισα εδώ.

    Αυτά,
    εδώ κ ο κόδικας μου:

    #include <iostream.h>
    #include <windows.h>
    #include <fstream.h>
    using namespace std;
    void colour() {
      HANDLE hConsole;
      hConsole = GetStdHandle (STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute
        (hConsole, FOREGROUND_RED |FOREGROUND_RED | FOREGROUND_INTENSITY |BACKGROUND_GREEN | BACKGROUND_GREEN | BACKGROUND_INTENSITY );
    }
    int main() {
    int input, ofid;
    float pA, pB, pG, g, ofA, ofB, ofG, ofGr, mo_p, mo;
    char quit, ofep[100], ofon[100];

    colour();
    cout <<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n";
    cout <<"    %%%%%%%%GYMNASIO META3ADWN%%%%%%%%%%     \n";
    cout <<"    %%%%%%%%%VATHMOLOGIA MA8ITWN%%%%%%%%     \n";
    cout <<"%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n\n\n";
    colour();
    cout << "1. Ypologiste vathmologia\n";
    cout << "2. Egrafi mathiti\n";
    cout << "3. E3odos\n";
    cout << "Epilogi: ";
    while((input > 3) || (input < 1)) {
        cin  >> input;
    switch(input) {
      case 1:
            cout <<"\nDWSE TON PROFORIKO VATHMO A TRIMHNOU"<<'\n';
        cin  >> pA;

        cout <<"\nDWSE TON PROFORIKO VATHMO B TRIMHNOU"<<'\n';
        cin  >> pB;

        cout <<"\nDWSE TON PROFORIKO VATHMO G TRIMHNOU"<<'\n';
        cin  >> pG;

        cout <<"\nDWSE TON GRAPTO VATHMO"<<'\n';
        cin  >> g;

        mo_p = (pA+pB+pG)/3;
        mo = (mo_p+g)/2;
        cout <<"\nO MESOS OROS VATHMOLOGIAS TOU MATHITI EINAI: "<< mo << "\n\n\n\n";
    break;
    case 2:
        cout <<"EGRAFI MATHITI\n\n\n";
        cout <<"Dose to eponimo tou mathiti: ";
        cin  >> ofep;

        cout <<"\nDose to onoma tou mathiti tou mathiti: ";
        cin  >> ofon;
        cout <<"\nDiloste to ID tou mathiti gia grigori euresi: ";
        cin  >> ofid;

        cout <<"\nDoste ton vathmo A triminou: ";
        cin  >>ofA;
        cout <<"\nDoste ton vathmo B triminou: ";
        cin  >>ofB;
        cout <<"\nDoste ton vathmo G triminou: ";
        cin  >>ofG;
        cout <<"\nDoste ton grapto vathmo: ";
        cin  >>ofGr;
        ofstream mathites_file("MATHITES.ids", ios::app);
    mathites_file << ofep  << ofon << ofid << ofA << ofB << ofG << ofGr ;
    break;

    }
    }
     return 0;
    }




    παρακαλώ βοήθεια!!!!!!
  •  10-01-2007, 15:37 23322 σε απάντηση της 23321

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    Καλό είναι να προσέχεις την ορθογραφία και το συντακτικό όσων γράφεις, γιατί είναι πολύ δύσκολο να καταλάβει κανείς τί λες και τί ρωτάς. Οι περισσότεροι από εμάς εργαζόμαστε και κοιτάμε στα κλεφτά τα email μας στη διάρκεια της ημέρας να δούμε αν υπάρχει ερώτηση να απαντήσουμε. Αν θέλω 10 λεπτά να καταλάβω την ερώτηση ......
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  10-01-2007, 15:41 23323 σε απάντηση της 23321

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

     spooky wrote:

    εξοφρενικά 
    μέσο
    κόδικα
    βοιθήσετε
    τελειόσει
    είξερα
    σιζίτισα
    εκτελήτε
    επιλογί
    τελειόνει ι case κ έρχετε η ώρα να μου εκτυπόσει 
    δημιουγρίτε
    δόσει
    τελευτέο
    παράδηγμα
    περίπτοσι
    εδό.

    κι εγώ είμαι ανορθόγραφος αλλά όχι τόσο.

  •  10-01-2007, 15:42 23324 σε απάντηση της 23321

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    :P σας έλιωσα συγνώμη....
  •  10-01-2007, 15:49 23325 σε απάντηση της 23324

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    τώρα πρέπει να νε κάπως καλύτερα :)
  •  10-01-2007, 16:03 23326 σε απάντηση της 23321

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    Θα πρέπει με το while loop απλά να ελέγχεις αν η τιμή είναι 3, δηλαδή να εκτελούνται τα περιεχόμενα όσο το input δεν είναι 3. Κατόπιν με το switch, αν το input είναι 1 θα κάνεις υπολογισμό βαθμολογίας και αν είναι 2, θα κάνεις εγγραφή μαθητή. Οτιδήποτε άλλο θα έχει ως αποτέλεσμα να εμφανίζεται πάλι το μενού σου. Γενικά, προσπάθησε να φτιάξεις πρώτα τον αλγόριθμο σε ψευδοκώδικα ώστε να σιγουρευτείς ότι έχεις πιάσει σωστά την λογική. Ιδιαίτερα εφόσον σκοπεύεις να το επεκτείνεις. Ως προς το #2, δεν κατάλαβα ακριβώς τι θες να κάνεις και που είναι το πρόβλημα. Ως προς το #3 , μήπως κάνεις κάποιο συντακτικό λάθος;


    Vir prudens non contra ventum mingit
  •  10-01-2007, 16:10 23328 σε απάντηση της 23325

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    καταρχάς ευχαριστώ για το reply kelman :)

    στο #2 λέω ότι οτι όταν τελειώνει η εκτέλεση των πράξεων π.χ της case1 το πρόγραμμα δίνει αποτέλεσμα αλλά δεν προλαβένω να το δώ γιατί κλείνει στιγμιαία....

    για το #3 δεν έχω ιδέα τι μπορεί να συμβένει!!!

  •  10-01-2007, 16:24 23329 σε απάντηση της 23328

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    Αυτό λοιπόν που μπορείς να κάνεις είναι να βάλεις ένα cin πρίν το break ώστε να πρέπει να πατήσει ο χρήστης το return για να συνεχιστεί το πρόγραμμα.
    Vir prudens non contra ventum mingit
  •  10-01-2007, 17:28 23332 σε απάντηση της 23329

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    μόλις τώρα το δοκίμασα...το πρόβλημα παραμένει....
  •  10-01-2007, 18:04 23335 σε απάντηση της 23332

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    Χμμ ... έχεις ξεκάθαρα λάθη λογικής και flow στο πρόγραμμά σου ...

    οκ, υποθέτω τώρα εγώ οτι ο ψευδοκώδικάς σου θα έπρεπε να είναι κάπως έτσι ...

    10 PrintMenu

    20 Ask for Input

    30 While input != 3

    31 Switch ... { ... }

    32 PrintMenu

    33 Ask for Input

    40 End While

    50 Exit

    Όπως έχεις αυτή τη στιγμή τον κώδικά σου, το input παίρνει την πρώτη φορά μια παο τις τιμές 1,2,3 - ας πούμε τη 2. Μόλις εκτελεστεί το case 2, το πρόγραμα γυρνάει στον έλεγχο του while, όπου ... (input > 3) || (input < 1)) .. το input ομως είναι αυτή τη στιγμή 1,2 ή 3 ... άρα ... ποτέ δε θα μπείς δεύτερη φορά στο switch !!!


    Angel
    O:]
  •  10-01-2007, 18:20 23336 σε απάντηση της 23321

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

     spooky wrote:
    #include <iostream.h>
    #include <windows.h>
    #include <fstream.h>
    ...
    int main() {
    int input, ofid;
    float pA, pB, pG, g, ofA, ofB, ofG, ofGr, mo_p, mo;
    char quit, ofep[100], ofon[100];


    Δεν είναι ανάγκη, και μάλιστα αντενδείκνυται, να δηλώνεις τις μεταβλητές σου όλες μαζί στην αρχή της function. Δήλωνε την κάθε μία εκεί που πρωτοχρειάζεται.

     spooky wrote:
    cout << "1. Ypologiste vathmologia\n";
    cout << "2. Egrafi mathiti\n";
    cout << "3. E3odos\n";
    cout << "Epilogi: ";
    while((input > 3) || (input < 1)) {


    Η μεταβλητή input δεν είναι αρχικοποιημένη και ο πρώτος έλεγχος του while έχει απροσδιόριστα αποτελέσματα.
    Ο έλεγχος θα πρέπει να είναι while (input != 3) και μέσα στο case σου να ελέγχεις αν έχει δοθεί σωστή επιλογή.

     spooky wrote:
        cin  >> input;
    switch(input) {
    ...
    case 2:
        cout <<"EGRAFI MATHITI\n\n\n";
        cout <<"Dose to eponimo tou mathiti: ";
        cin  >> ofep;

        cout <<"\nDose to onoma tou mathiti tou mathiti: ";
        cin  >> ofon;
        cout <<"\nDiloste to ID tou mathiti gia grigori euresi: ";
        cin  >> ofid;


    Εδώ διαβάζεις από την κονσόλα μέσα σε char arrays δεδομένου μεγέθους, και διατρέχεις σοβαρό κίνδυνο buffer overflow. Προτιμότερο αντί για char[] να χρησιμοποιήσεις std::string και την std::getline.

     spooky wrote:
        ofstream mathites_file("MATHITES.ids", ios::app);
    mathites_file << ofep  << ofon << ofid << ofA << ofB << ofG << ofGr ;
    break;
    }
    }
     return 0;
    }


    Για να υπάρχουν κενά στο αρχείο πρέπει να τα γράψεις εσύ!
    Π.χ. mathites_file << ofep << " " << ofon << " " << ofid << " " << ofA << " " << ofB << " " << ofG << " " << ofGr ;

    Επίσης, καλό είναι να μη γράφεις όλο σου τον κώδικα στην main(), αλλά π.χ. για κάθε case να έχεις μια διαφορετική function που καλείται από τη main.

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


    Νατάσα Μανουσοπούλου
  •  10-01-2007, 22:28 23342 σε απάντηση της 23336

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    σας ευχαριστώ όλους!

    συνεχίζω βέβαια να μην μπορώ να βάλω κ τρίτη case.. :(

    εμ btw

    κυρία mns

    "Προτιμότερο αντί για char[] να χρησιμοποιήσεις std::string και την std::getline."

    εδώ δεν το πολύ έπιασα....τα std::string κ std:getline που θα τα βάλω?...

    (άλλος ένας αρχάριος...)
  •  10-01-2007, 22:53 23343 σε απάντηση της 23342

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    Το πρόβλημά σου με το case 3 οφείλεται στη δήλωση ofstream mathites_file που περιέχεται στο case 2. Μέσα στο scope του switch δημιουργείται ένα object (το mathites_file) το οποίο δε θα αρχικοποιηθεί αν δεν περάσεις από το case αυτό, αλλά θα κληθεί ο destructor του. Η λύση σου είναι να βάλεις τον κώδικα κάθε case (εκτός από το break) σε { } ή να το βγάλεις σε χωριστή function.

    Όσο για το char[] και το string, θέλεις κάτι τέτοιο:
    std::string pupilName;
    std::getline(myStream, pupilName);


    Νατάσα Μανουσοπούλου
  •  10-01-2007, 23:06 23345 σε απάντηση της 23343

    Απ: διάφορα προβλήματα με το προγραμμά μου... :( (C++)

    ευχαριστώ πολύ καλές δουλειές σε όλους και καλό βράδυ!!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems