foutzos Δημοσ. 23 Ιουνίου 2015 Δημοσ. 23 Ιουνίου 2015 Καλησπέρα , Μπορεί κάποιος να μου πει τι λάθος κάνω και ενώ δεν υπάρχει συντακτικό πρόβλημα όταν ανοίγει η κονσόλα μου λέει ότι το πρόγραμμα σταμάτησε να λειτουργεί; Εδώ ο κώδικας. #include <iostream> using namespace std; int main() { int x; int i; int counter1=0; int counter2=0; int counter3=0; double result1=1; double result2=1; double result3=1; double num[x]; cout<<"dose to plithos twn arithmwn"<<endl; cin>>x; for (i=0;i<x;i++) { cin>>num[i]; if (num[i]<-10) { counter1++; result1=result1*num[i]; } else if (-10<=num[i]<10) { counter2++; result2=result2*num[i]; } else { counter3++; result3=result3*num[i]; } } cout<<"To plithos twn arithmwn stin 1i katigoria einai"<<counter1<<endl; cout<<"To plithos twn arithmwn stin 2i katigoria einai"<<counter2<<endl; cout<<"To plithos twn arithmwn stin 3i katigoria einai"<<counter3<<endl; cout<<"To ginomeno twn arithmwn stin 1i katigoria einai"<<result1<<endl; cout<<"To ginomeno twn arithmwn stin 2i katigoria einai"<<result2<<endl; cout<<"To ginomeno twn arithmwn stin 3i katigoria einai"<<result3<<endl; system ("pause"); return 0; }
Moderators Kercyn Δημοσ. 23 Ιουνίου 2015 Moderators Δημοσ. 23 Ιουνίου 2015 Το double num[x] είναι λάθος. Δες κάποιον container (array ίσως).
nikos134 Δημοσ. 23 Ιουνίου 2015 Δημοσ. 23 Ιουνίου 2015 Έχεις λαθος οταν προσπαθεις να κανεις double num[x]...To x δεν το εχεις κανει inialize.. Μπορεις να το κανεις ετσι αν θες: #include <iostream> using namespace std; int main() { int x; int i; int counter1 = 0; int counter2 = 0; int counter3 = 0; double result1 = 1; double result2 = 1; double result3 = 1; cout << "dose to plithos twn arithmwn" << endl; cin>>x; double num[x]; for (i = 0; i < x; i++) { cin >> num[i]; if (num[i]<-10) { counter1++; result1 = result1 * num[i]; } else if (-10 <= num[i] < 10) { counter2++; result2 = result2 * num[i]; } else { counter3++; result3 = result3 * num[i]; } } cout << "To plithos twn arithmwn stin 1i katigoria einai" << counter1 << endl; cout << "To plithos twn arithmwn stin 2i katigoria einai" << counter2 << endl; cout << "To plithos twn arithmwn stin 3i katigoria einai" << counter3 << endl; cout << "To ginomeno twn arithmwn stin 1i katigoria einai" << result1 << endl; cout << "To ginomeno twn arithmwn stin 2i katigoria einai" << result2 << endl; cout << "To ginomeno twn arithmwn stin 3i katigoria einai" << result3 << endl; system("pause"); return 0; }
petrosvel Δημοσ. 23 Ιουνίου 2015 Δημοσ. 23 Ιουνίου 2015 <p> Το double num[x] είναι λάθος. Δες κάποιον container (array ίσως).<br /> <br />Γιατι ειναι λαθος;;; Δεν εννοεί ενα πίνακα double? προς φυγή παρεξηγήσεων.... Δεν το γνωρίζω.... Απορία.... Και απο την στιγμη που δεν εχει ορίσει κάποιο χώρο που θα εχει ο πίνακας δεν θα έπρεπε να βγάζει λαθος; Δηλαδη να ξερει να κρατήσει χ θέσεις;</p>
Moderators Kercyn Δημοσ. 23 Ιουνίου 2015 Moderators Δημοσ. 23 Ιουνίου 2015 Την ώρα που θα γίνει compile το πρόγραμμα η τιμή του x δεν είναι γνωστή. Η δυναμική δέσμευση δε γίνεται έτσι. Γι' αυτό σου πρότεινα να χρησιμοποιήσεις std::array, θα είναι πιο εύκολο να κάνεις αυτό που θες. Έχεις λαθος οταν προσπαθεις να κανεις double num[x]...To x δεν το εχεις κανει inialize.. Μπορεις να το κανεις ετσι αν θες:#include <iostream>using namespace std;int main() {int x;int i;int counter1 = 0;int counter2 = 0;int counter3 = 0;double result1 = 1;double result2 = 1;double result3 = 1;cout << "dose to plithos twn arithmwn" << endl;cin>>x;double num[x];for (i = 0; i < x; i++) {cin >> num;if (num<-10) {counter1++;result1 = result1 * num;} else if (-10 <= num < 10) {counter2++;result2 = result2 * num;} else {counter3++;result3 = result3 * num;}}cout << "To plithos twn arithmwn stin 1i katigoria einai" << counter1 << endl;cout << "To plithos twn arithmwn stin 2i katigoria einai" << counter2 << endl;cout << "To plithos twn arithmwn stin 3i katigoria einai" << counter3 << endl;cout << "To ginomeno twn arithmwn stin 1i katigoria einai" << result1 << endl;cout << "To ginomeno twn arithmwn stin 2i katigoria einai" << result2 << endl;cout << "To ginomeno twn arithmwn stin 3i katigoria einai" << result3 << endl;system("pause");return 0;} Αυτό είναι ιδιαίτερα επικίνδυνο. Τι θα γίνει αν εγώ δε δώσω αριθμό;
nikos134 Δημοσ. 23 Ιουνίου 2015 Δημοσ. 23 Ιουνίου 2015 Την ώρα που θα γίνει compile το πρόγραμμα η τιμή του x δεν είναι γνωστή. Η δυναμική δέσμευση δε γίνεται έτσι. Γι' αυτό σου πρότεινα να χρησιμοποιήσεις std::array, θα είναι πιο εύκολο να κάνεις αυτό που θες. Αυτό είναι ιδιαίτερα επικίνδυνο. Τι θα γίνει αν εγώ δε δώσω αριθμό; Προφανώς είναι επικίνδυνο αλλά απο ότι έχω καταλάβει το πρόγραμμα είναι σχετικά απλό και δεν τίθεται θέμα για αν ο χρήστης δώσει λάθος input η καθόλου...Τότε πρέπει να ψάξει σε κάτι που πρότειενες παραπάνω..
foutzos Δημοσ. 23 Ιουνίου 2015 Μέλος Δημοσ. 23 Ιουνίου 2015 Όντως είναι για απλή χρήση. Αν κατάλαβα καλά απλά άλλαξες την σειρά που κάνουμε το cin @nikos; Επίσης αυτό που δεν καταλαβαίνω είναι γιατί στο dev-c μου τρέχει κανονικά ενώ στο visual μου βγάζει λάθος στον πίνακα. Ευχαριστώ πολύ όλους για τις απαντήσεις σας.
Moderators Kercyn Δημοσ. 23 Ιουνίου 2015 Moderators Δημοσ. 23 Ιουνίου 2015 Γιατί το dev έχει 10 χρόνων compiler.
nikos134 Δημοσ. 24 Ιουνίου 2015 Δημοσ. 24 Ιουνίου 2015 Όντως είναι για απλή χρήση. Αν κατάλαβα καλά απλά άλλαξες την σειρά που κάνουμε το cin @nikos; Επίσης αυτό που δεν καταλαβαίνω είναι γιατί στο dev-c μου τρέχει κανονικά ενώ στο visual μου βγάζει λάθος στον πίνακα. Ευχαριστώ πολύ όλους για τις απαντήσεις σας. ναι..γτ ετσι οπως το ειχες εσύ το x δεν του έχεις δώσει καποια τιμή... οπότε πρώτα διαβαζεις την τιμή και μετα δημιουργείς το πίνακα σου... Εξαρτάται απο το compiler...Επίσης γτ μαλλον το dev-c πιστευει οτι υπάρχει τιμη πιαθανότατα καποιο garbage. 1
defacer Δημοσ. 24 Ιουνίου 2015 Δημοσ. 24 Ιουνίου 2015 Το double num[x] είναι λάθος (δεν κάνει compile) σε όλες τις εκδόσεις του προτύπου της C++. Οι λόγοι είναι ιδιαίτερα τεχνικοί και ταυτόχρονα κλασικοί με την έννοια ότι έχει συζητηθεί νομίζω αρκετές φορές. Δηλαδή θεωρητικά αυτό το πρόγραμμα δεν είναι C++ και ούτε ποτέ μπορεί να γίνει αν δε χρησιμοποιηθεί δυναμική διαχείριση μνήμης με τον ένα ή τον άλλο τρόπο. Στην πράξη τώρα, ο gcc υποστηρίζει αυτή τη δυνατότητα σαν extension στη γλώσσα. Ο MSVC κάνει αυτό που λέει το πρότυπο και αρνείται. Υπόψιν ότι ακόμα και στον gcc η δήλωση του double num[x] πριν δοθεί τιμή στο x όπως είπαν τα παιδιά είναι έξτρα (και μοιραίο όπως έτυχε να αποδειχτεί) λάθος.
παπι Δημοσ. 25 Ιουνίου 2015 Δημοσ. 25 Ιουνίου 2015 Πέρα από τα "τεχνικά" θέματα. Ετσι όπως το έχεις γράψει, δεν θέλει πίνακα. 2
foutzos Δημοσ. 25 Ιουνίου 2015 Μέλος Δημοσ. 25 Ιουνίου 2015 Πέρα από τα "τεχνικά" θέματα. Ετσι όπως το έχεις γράψει, δεν θέλει πίνακα. σωστός. δική μου χαζομάρα.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα