teresa92 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Γεια σας παιδια! Αντιμετωπιζω ενα προβλημα: Θελω να ορισω δυο μεταβλητες ως ακαιρεους. Στην συνεχεια να τους διαβαζω με scanf και να κανω διαιρεση .Το αποτελεσμα πρεπει να βγαινει δεκαδικο. Χρησιμοποιω το type casinting αλλα δεν πιανει ...Δηλαδη κανω αυτο: #include <stdio.h> main() { int x,y,choice; float result; char Continue='y'; printf("1.Add\n2.Subtract\n3.Multiply\n4.Divide\n5.Modulus\n"); printf("Enter your choice 1-5:\n"); scanf("%d",&choice); printf("Enter tow numbers:\n"); scanf("%d %d",&x,&y); do { if(choice==1) { result=x+y; } else if (choice==2) { result=x-y; } else if (choice==3) { result=x*y; } else if(choice==4) { result=(float)(x/y); // εδω ειναι το προβλημα } else if (choice==5) { result=x%y; } else { } printf("Relsult: %d\n",result); printf("Continue?\n"); scanf("%c\n",&Continue); } while(Continue=='y'); } Το αποτελεσμα που μου βγενει για choice 4 και πχ x 8 και y 9 ειναι το reluslt= 0 Μηπως μπορει καποιος να με βοηθησει στο πως να βγαλει το σωστο αποτελεσμα? Σας ευχαριστω εκ των προτερων
Dinos_12345 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Την επόμενη φορα μην βάλεις όλον τον κώδικα. βάλε το int μπροστά από τη main και στο printf του result βάλε %f για να τυπωθεί σωστά. Επίσης μετά το type casting βγάλε τις παρενθέσεις.
the other one Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 το casting το κάνουμε μέσα στη διαίρεση όχι απ' έξω. δηλαδή ((float) x) / y. δεν έχει σημασία αν το casting θα το κάνεις στο x, το y ή και στα 2 αλλά θέλει τουλάχιστον σε κάποιο. Αν το κάνεις στο αποτέλεσμα απλά θα γίνει ακέραια διαίρεση και μετά τον ακέραιο που θα προκύψει θα τον κάνεις float δηλαδή στη προκειμένη 8/9 = 0 --> 0.0
teresa92 Δημοσ. 4 Σεπτεμβρίου 2016 Μέλος Δημοσ. 4 Σεπτεμβρίου 2016 ευχαριστω πολυ που απαντησες τα αλλαξα και βγαινει 0,00000 για 8 και 9 x και y αντιστοιχα δεν ξερω τι εννοεις με τισ παρενθεσεισ ομως... ο κωδικας ειναι : #include <stdio.h> int main() { int x,y ; scanf ("%d %d",&x,&y); float result; result= (float)(x/y); printf ("%f",result); } ok τελεια λειτουργει σασ ευχαριστω ολουσ !!!!!!!
astrosunnefo Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Επίσης, πρόσθεσε έναν έλεγχο για την είσοδο του χρήστη. Πρέπει ο κώδικάς σου να είναι σε θέση να χειρίζεται και τις απρόσμενες καταστάσεις, όχι μόνο να εκτελεί τις λειτουργίες που έχεις στο μυαλό σου προς υλοποίηση. Στη συγκεκριμένη περίπτωση, πρέπει να προβλέπεις την περίπτωση που ο χρήστης δώσει κάποια επιλογή εκτός των 1, [...], 5. Τσέκαρε και την do... while σου. 2
Dinos_12345 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Και αυτό το τραγικό if else, κάντο μία switch man.
astrosunnefo Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Και αυτό το τραγικό if else, κάντο μία switch man. Κι έλεγα να το πω; να μην το πω; χαχα Thumbs up! Φαντάζομαι πως τώρα ξεκινάει ο φίλος μας, οπότε στη συνέχεια θα έπαιζε στανταράκι η switch. Όπως θα γίνει και πιο βελτιωμένος ο κώδικας οπτικά, θα παίξει οργάνωση (μιας και τα προβλήματα θα γίνουν πιο σύνθετα) κλπ Αλλά, καλά κάνεις και το λες. Καλό είναι κάποια πράγματα να τηρούνται εξ αρχής και να γίνονται συνήθεια. 1
Dinos_12345 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Κι έλεγα να το πω; να μην το πω; χαχα Thumbs up! Φαντάζομαι πως τώρα ξεκινάει ο φίλος μας, οπότε στη συνέχεια θα έπαιζε στανταράκι η switch. Όπως θα γίνει και πιο βελτιωμένος ο κώδικας οπτικά, θα παίξει οργάνωση (μιας και τα προβλήματα θα γίνουν πιο σύνθετα) κλπ Αλλά, καλά κάνεις και το λες. Καλό είναι κάποια πράγματα να τηρούνται εξ αρχής και να γίνονται συνήθεια. Εγώ επειδή βαριέμαι το syntax της switch παίζω με one-liners αν έχω τόσο μικρές if. Δηλαδή το παραπάνω θα το έκανα σαν: if(choice==1) result=x+y; else if(choice==2) result=x-y; else if(choice==3) result=x*y; else if(choice==4) result=(float)x/y; else if(choice==5) result=x%y; else printf("Invalid choice!"); 1
gon1332 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Εγώ επειδή βαριέμαι το syntax της switch παίζω με one-liners αν έχω τόσο μικρές if. Δηλαδή το παραπάνω θα το έκανα σαν: if(choice==1) result=x+y; else if(choice==2) result=x-y; else if(choice==3) result=x*y; else if(choice==4) result=(float)x/y; else if(choice==5) result=x%y; else printf("Invalid choice!"); Αυτό μόνο αν έχεις συγκρίσεις με C strings, κάτι που προφανώς και δεν υποστηρίζεται σε switch στη C.
Dinos_12345 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 Αυτό μόνο αν έχεις συγκρίσεις με C strings, κάτι που προφανώς και δεν υποστηρίζεται σε switch στη C. Η C είναι στο μπαούλο γνώσεων μαζί με την αντιγόνη και τα αρχαία γυμνασίου, deprecated για εμένα
pmav99 Δημοσ. 4 Σεπτεμβρίου 2016 Δημοσ. 4 Σεπτεμβρίου 2016 [..] αντιγόνη [...] deprecated για εμένα Ίσως κάποια μέρα να συνειδητοποιήσεις τη διαφορά μεταξύ εκπαίδευσης και μόρφωσης...
Dinos_12345 Δημοσ. 5 Σεπτεμβρίου 2016 Δημοσ. 5 Σεπτεμβρίου 2016 Ίσως κάποια μέρα να συνειδητοποιήσεις τη διαφορά μεταξύ εκπαίδευσης και μόρφωσης... I don't even care. Δεν βλέπω τον λόγο να ξοδέψω χρόνο διαβάζοντας κάτι σε μία γλώσσα που ούτε καταλαβαίνω, αλλά ούτε με νοιάζει και να μάθω, ενώ θα μπορούσα να κάνω κάτι πιο δημιουργικό. Ναι διδάσκει διάφορα πράγματα, πολύ ψαγμένα και deep, αλλά ούτε αυτό με νοιάζει, γιατί δεν περιμένω ένα παραμύθι να με κάνει καλύτερο άνθρωπο. Δεν ξέρω αν κατάλαβα λάθος αυτό που είπες, αλλά νομίζω πως πήγαινε στο ότι έχω την αντιγόνη στα σκουπίδια του εγκεφάλου μου. Όσο ξερό και αν ακούγεται, άλλο τόσο αληθινό είναι.
the other one Δημοσ. 5 Σεπτεμβρίου 2016 Δημοσ. 5 Σεπτεμβρίου 2016 Αν θέλει κάποιος να αποκαλεί τον εαυτό του επιστήμονα κι όχι χομπίστα ( αν δε κάνω λάθος το σπουδάζεις αυτό ) τότε καλό είναι να έχει ένα γερό υπόβαθρο σε C για διάφορους λόγους που βαριέμαι να αναλύω. Δεν είναι τυχαίο που όλες σχεδόν οι σοβαρές σχολές πληροφορικής σε ξεκινούν από C.
Dinos_12345 Δημοσ. 5 Σεπτεμβρίου 2016 Δημοσ. 5 Σεπτεμβρίου 2016 Έχω μέχρι εκεί που με πάει η σχολή μου. Μπορώ να κάνω πράγματα, ίσως πολλά περισσότερα από την πλειοψηφία των συμφοιτητών μου, και ξέρω τι μου γίνεται, αλλά δεν σημαίνει απαραίτητα ότι διασκεδάζω όταν γράφω C.
White_Cat Δημοσ. 6 Σεπτεμβρίου 2016 Δημοσ. 6 Σεπτεμβρίου 2016 Καλησπέρα !Κατά τη γνώμη μου ο κώδικας μπορεί να γραφεί ως εξής για να δουλεύει πιο σωστά. Κατ' αρχήν τα ορίσματα εισόδου είναι καλό να δηλωθούν εξ αρχής ως εν δυνάμει δεκαδικοί ώστε να μη μπερδευόμαστε στη διαίρεση με ορίσματα τύπου int.Επίσης όπως είπε παραπάνω ο φίλος μας, αντί των πολλαπλών if, είναι καλύτερα να βάλουμε μια εντολή switch. Τέλος, σχετικά με τη μεταβλητή choice, είναι σκόπιμο να φροντίσουμε ώστε να γίνεται ορθή διαχείριση και των μη αποδεκτών επιλογών. Ακολουθεί η πρότασή μου για τη διόρθωση του κώδικα : #include <stdio.h>void main() {int choice,a,b;double x,y,result;char Continue;do {printf("1.Add\n2.Subtract\n3.Multiply\n4.Divide\n5.Modulus\n");do {printf("Enter your choice 1-5:\n");scanf("%d",&choice);if((choice<1)||(choice>5)) printf("Unaccepted value. Please try again.");} while((choice<1)||(choice>5));printf("Enter two numbers:\n");scanf("%lf %lf",&x,&y);switch(choice) {case 1: result=x+y; break;case 2: result=x-y; break;case 3: result=x*y; break;case 4: result=x/y; break;case 5: a=(int)x; b=(int)y; result=a%b; break;}printf("\n\nResult : %.3f\n\n",result);printf("Continue ?");scanf("%s",&Continue);} while((Continue=='y')||(Continue=='Y'));}Για όποια άλλη διευκρίνιση είμαι στη διάθεσή σας,Μ' ένα φιλικό νιαούρισμα για καληνύχτα,Ο Άσπρος Γάτος 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα