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.
Αυτά επί τροχάδην. Θα συμφωνήσω με τα σχόλια για την ορθογραφία, και για έναν άλλο λόγο: αν βαριέσαι να προσέχεις τα κείμενα που γράφεις, μάλλον θα βαριέσαι να προσέξεις και τον κώδικα που γράφεις, και το αποτέλεσμα και στις δύο περιπτώσεις θα είναι κατώτερο του επιθυμητού.
Νατάσα Μανουσοπούλου