imitheos Δημοσ. 17 Νοεμβρίου 2012 Δημοσ. 17 Νοεμβρίου 2012 Αν μετα τις if δεν υπαρχουν ερωτηματικα κρασαρει με το που δωσω π.χ 5/0 Εννοείται πως δεν θα βάλεις τα ερωτηματικά γιατί έτσι δεν έχουν νόημα τα if σου. Διόρθωσες τα = σε == όπως είπαμε ?
alexc Δημοσ. 17 Νοεμβρίου 2012 Δημοσ. 17 Νοεμβρίου 2012 while (numb2=0) Η συνθηκη σου ειναι λαθος....while (numb2==0) Θελουμε τον τελεστη ισοτητας οχι της εκχωρησης τιμης!
jimisvog Δημοσ. 17 Νοεμβρίου 2012 Μέλος Δημοσ. 17 Νοεμβρίου 2012 Ωχ ναι.. Το διορθωσα και εγινε.. Να σαι καλα φιλε.. Πραγματικα χιλια ευχαριστω..
imitheos Δημοσ. 17 Νοεμβρίου 2012 Δημοσ. 17 Νοεμβρίου 2012 while (numb2=0) Η συνθηκη σου ειναι λαθος....while (numb2==0) Θελουμε τον τελεστη ισοτητας οχι της εκχωρησης τιμης! Ωχ ναι.. Το διορθωσα και εγινε.. Να σαι καλα φιλε.. Πραγματικα χιλια ευχαριστω.. Εγώ στις 23:31 και ο antbyron στις 23:24 τι διαφορετικό είπαμε ?
jimisvog Δημοσ. 17 Νοεμβρίου 2012 Μέλος Δημοσ. 17 Νοεμβρίου 2012 Εγώ στις 23:31 και ο antbyron στις 23:24 τι διαφορετικό είπαμε ? Σε σενα το ειπα.. μετα το refresh βγηκε η απαντηση του alexc.. Οπως και να εχει σας ευχαριστω...
Star_Light Δημοσ. 18 Νοεμβρίου 2012 Δημοσ. 18 Νοεμβρίου 2012 Εχω κανει ενα λαθος ... στην getchar() ο ch που επιστρέφεται πρεπει να δηλωθει σαν int και οχι σαν char. @jimisvog καντο με switch καλυτερα ειναι λιγοτερο περιπλοκο και πιο ευαναγνωστο Kαμια φορα κάνουμε αγωνα και ψάχνουμε τροπος να ελαφρύνουμε τον κώδικα απο περιττες if ! Αλλα και while και for κτλπ....
alexc Δημοσ. 18 Νοεμβρίου 2012 Δημοσ. 18 Νοεμβρίου 2012 [offtopic]jimisvog σε ποιο τμημα εισαι??? και εγω πρωτοετης ειμαι!! [/offtopic]
jimisvog Δημοσ. 18 Νοεμβρίου 2012 Μέλος Δημοσ. 18 Νοεμβρίου 2012 jimisvog σε ποιο τμημα εισαι??? και εγω πρωτοετης ειμαι!! Τμημα Πληροφορικης στο Ιονιο Πανεπιστημιο.. Εσυ?
imitheos Δημοσ. 18 Νοεμβρίου 2012 Δημοσ. 18 Νοεμβρίου 2012 Σε σενα το ειπα.. μετα το refresh βγηκε η απαντηση του alexc.. Οπως και να εχει σας ευχαριστω... Ωραία. Χαίρομαι που λύθηκε. Όσον αφορά τη διαίρεση, κάτι που μου χτύπησε άσχημα στο μάτι είναι το if+do/while. Έχεις if (numb2 == 0) και μέσα σε αυτό τρέχεις do {} while (numb2==0). Γιατί δεν το κάνεις while (numb2 == 0) { } ώστε να μην χρειάζεται το if ?
jimisvog Δημοσ. 18 Νοεμβρίου 2012 Μέλος Δημοσ. 18 Νοεμβρίου 2012 Όσον αφορά τη διαίρεση, κάτι που μου χτύπησε άσχημα στο μάτι είναι το if+do/while. Έχεις if (numb2 == 0) και μέσα σε αυτό τρέχεις do {} while (numb2==0). Γιατί δεν το κάνεις while (numb2 == 0) { } ώστε να μην χρειάζεται το if ? Δικιο εχεις.. Απλα μεσα στην συγχηση τα εβαλα ολα.. Το εβγαλα και το if..
migf1 Δημοσ. 18 Νοεμβρίου 2012 Δημοσ. 18 Νοεμβρίου 2012 Το πρόβλημα κατά το οποίο αγνοούσε το if μετά την scanf() ήταν το (infamous) Line Buffering Εκτός από τους τρόπους που προτάθηκαν ήδη στο νήμα, λύνεται και με fgets()/sscanf(). Ο κώδικας που ακολουθεί χρησιμοποιεί αυτό τον συνδυασμό, αλλά κατά τα άλλα λύνει την άσκηση με array of function pointers, μέσα σε ένα "rather cryptic" do-while loop (δηλαδή δεν απευθύνεται σε παιδιά που κάνουν τα πρώτα τους βήματα... τον προσθέτω να υπάρχει στο νήμα ως εναλλακτικός, προχωρημένος, αλλά αρκετά συνηθισμένος τρόπος λύσης τέτοιου είδους προβλημάτων). > #include <stdio.h> // printf(), puts(), fgets(), sscanf() #include <stdlib.h> // exit() #include <limits.h> // INT_MIN #include <string.h> // strchr() #define MAXINPUT (255+1) #define OPERATORS "+-*/%" /* -------------------------------------------------- */ int add(int x, int y){ return x + y; } int sub(int x, int y){ return x - y; } int mul(int x, int y){ return x * y; } int dvs(int x, int y){ return 0 == y ? INT_MIN : x/y; } int mod(int x, int y){ return 0 == y ? INT_MIN : x%y; } /* -------------------------------------------------- */ int char_to_oper( int ch ) // converts operator symbol to array index { char *cp = strchr(OPERATORS, ch); return (NULL == cp) ? -1 : (int)(cp - OPERATORS); } /* -------------------------------------------------- */ int main( void ) { int (*operation[])(int x, int y) = { // array of function pointers &add, &sub, &mul, &dvs, &mod }; char chOper, input[MAXINPUT] = {'\0'}; int op1, op2, iOper, result; printf( "SUPPORTED OPERATORS: %s\n\n", OPERATORS ); do { puts( "Enter operands & operator separated by space (e.g: 2 + 3)" ); fgets(input, MAXINPUT, stdin); } while( 3 != sscanf(input, "%d %c %d", &op1, &chOper, &op2) // validate # of input tokens || -1 == (iOper=char_to_oper(chOper)) // validate operator symbol || INT_MIN == (result = (*operation[iOper])(op1, op2)) // validate result (eg: div by non-0) ); printf( "%d\n", result ); exit(0); }
ntellos Δημοσ. 19 Νοεμβρίου 2012 Δημοσ. 19 Νοεμβρίου 2012 Καταρχάς απ' ότι κατάλαβα είστε από ΤΕΙ Αθήνας. Επειδή κι εγώ εκεί σπουδάζω πετάξτε όσο είναι καιρός το DEV C++ και βάλτε κάποιο άλλο IDE (eclipse cdt, netbeans, visual studio) 3
migf1 Δημοσ. 19 Νοεμβρίου 2012 Δημοσ. 19 Νοεμβρίου 2012 Υπάρχει σύγχρονο fork του Dev-C++: http://www.insomnia....υ-orwell-dev-c/ Για μόνο C υπάρχει και η Pelles C: http://www.insomnia....e-της-pelles-c/ (η μόνη από όσο γνωρίζω με σχεδόν πλήρη υποστήριξη του προτύπου C11)
antbyron Δημοσ. 19 Νοεμβρίου 2012 Δημοσ. 19 Νοεμβρίου 2012 Καταρχάς απ' ότι κατάλαβα είστε από ΤΕΙ Αθήνας. Επειδή κι εγώ εκεί σπουδάζω πετάξτε όσο είναι καιρός το DEV C++ και βάλτε κάποιο άλλο IDE (eclipse cdt, netbeans, visual studio) Πες κάποιο επιχείρημα που να στηρίζει την προτροπή σου να πετάξει κάποιος το DEV CPP.
migf1 Δημοσ. 19 Νοεμβρίου 2012 Δημοσ. 19 Νοεμβρίου 2012 Πες κάποιο επιχείρημα που να στηρίζει την προτροπή σου να πετάξει κάποιος το DEV CPP. Είναι εγκαταλελειμμένο εδώ και πάρα πολλά χρόνια, περιέχει πανάρχαιο compiler και είναι γεμάτο bugs. Για να μην αλλάζεις περιβάλλον και ταυτόχρονα να επωφεληθείς από όλες τις εξελίξεις της γλώσσας (τόσο της C όσο και της C++) μπορείς να κατεβάσεις το σύγχρονο fork του, το Orwell Dev-C++ που σου έγραψα στο προηγούμενο ποστ. Έχει download που περιλαμβάνει (και σετάρει αυτόματα) σύγχρονες εκδόσεις του mingw toolchain (compiler, κλπ). Έχει διορθώσει πολλά από τα bugs του παλιού, και το κυριότερο είναι πως συνεχίζει να εξελίσσεται. Λεπτομέρειες και κατέβασμα, εδώ: http://orwelldevcpp.blogspot.gr/ 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα