Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδια! Αντιμετωπιζω ενα προβλημα:

Θελω να ορισω δυο μεταβλητες ως ακαιρεους. Στην συνεχεια να τους διαβαζω  με 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 

Μηπως μπορει καποιος να με βοηθησει στο πως να βγαλει το σωστο αποτελεσμα?

Σας ευχαριστω εκ των προτερων

Δημοσ.

Την επόμενη φορα μην βάλεις όλον τον κώδικα. 

βάλε το int μπροστά από τη main και στο printf του result βάλε %f για να τυπωθεί σωστά. Επίσης μετά το type casting βγάλε τις παρενθέσεις.

Δημοσ.

το casting το κάνουμε μέσα στη διαίρεση όχι απ' έξω. δηλαδή ((float) x) / y.

δεν έχει σημασία αν το casting θα το κάνεις στο x, το y ή και στα 2 αλλά θέλει τουλάχιστον σε κάποιο. Αν το κάνεις στο αποτέλεσμα απλά θα γίνει ακέραια διαίρεση και μετά τον ακέραιο που θα προκύψει θα τον κάνεις float δηλαδή στη προκειμένη 8/9 = 0 --> 0.0

Δημοσ.

ευχαριστω πολυ που απαντησες

τα αλλαξα και βγαινει 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 τελεια λειτουργει σασ ευχαριστω ολουσ !!!!!!!

Δημοσ.

Επίσης, πρόσθεσε έναν έλεγχο για την είσοδο του χρήστη. Πρέπει ο κώδικάς σου να είναι σε θέση να χειρίζεται και τις απρόσμενες καταστάσεις, όχι μόνο να εκτελεί τις λειτουργίες που έχεις στο μυαλό σου προς υλοποίηση. Στη συγκεκριμένη περίπτωση, πρέπει να προβλέπεις την περίπτωση που ο χρήστης δώσει κάποια επιλογή εκτός των 1, [...], 5. 

 

Τσέκαρε και την do... while σου.

  • Like 2
Δημοσ.

Και αυτό το τραγικό if else, κάντο μία switch man.

 

Κι έλεγα να το πω; να μην το πω; χαχα

 

Thumbs up!

 

 

Φαντάζομαι πως τώρα ξεκινάει ο φίλος μας, οπότε στη συνέχεια θα έπαιζε στανταράκι η switch. Όπως θα γίνει και πιο βελτιωμένος ο κώδικας οπτικά, θα παίξει οργάνωση (μιας και τα προβλήματα θα γίνουν πιο σύνθετα) κλπ Αλλά, καλά κάνεις και το λες. Καλό είναι κάποια πράγματα να τηρούνται εξ αρχής και να γίνονται συνήθεια.

 

  • Like 1
Δημοσ.

Κι έλεγα να το πω; να μην το πω; χαχα

 

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!");
  • Like 1
Δημοσ.

 

Εγώ επειδή βαριέμαι το 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.

Δημοσ.

Αυτό μόνο αν έχεις συγκρίσεις με C strings, κάτι που προφανώς και δεν υποστηρίζεται σε switch στη C.

Η C είναι στο μπαούλο γνώσεων μαζί με την αντιγόνη και τα αρχαία γυμνασίου, deprecated για εμένα :P

Δημοσ.

[..] αντιγόνη [...] deprecated για εμένα :P

 

Ίσως κάποια μέρα να συνειδητοποιήσεις τη διαφορά μεταξύ εκπαίδευσης και μόρφωσης...

Δημοσ.

Ίσως κάποια μέρα να συνειδητοποιήσεις τη διαφορά μεταξύ εκπαίδευσης και μόρφωσης...

I don't even care. Δεν βλέπω τον λόγο να ξοδέψω χρόνο διαβάζοντας κάτι σε μία γλώσσα που ούτε καταλαβαίνω, αλλά ούτε με νοιάζει και να μάθω, ενώ θα μπορούσα να κάνω κάτι πιο δημιουργικό. Ναι διδάσκει διάφορα πράγματα, πολύ ψαγμένα και deep, αλλά ούτε αυτό με νοιάζει, γιατί δεν περιμένω ένα παραμύθι να με κάνει καλύτερο άνθρωπο. 

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

Δημοσ.

Αν θέλει κάποιος να αποκαλεί τον εαυτό του επιστήμονα κι όχι χομπίστα ( αν δε κάνω λάθος το σπουδάζεις αυτό ) τότε καλό είναι να έχει ένα γερό υπόβαθρο σε C για διάφορους λόγους που βαριέμαι να αναλύω. Δεν είναι τυχαίο που όλες σχεδόν οι σοβαρές σχολές πληροφορικής σε ξεκινούν από C.

Δημοσ.

Έχω μέχρι εκεί που με πάει η σχολή μου. Μπορώ να κάνω πράγματα, ίσως πολλά περισσότερα από την πλειοψηφία των συμφοιτητών μου, και ξέρω τι μου γίνεται, αλλά δεν σημαίνει απαραίτητα ότι διασκεδάζω όταν γράφω C.

Δημοσ.

Καλησπέρα !

Κατά τη γνώμη μου ο κώδικας μπορεί να γραφεί ως εξής για να δουλεύει πιο σωστά. Κατ' αρχήν τα ορίσματα εισόδου είναι καλό να δηλωθούν εξ αρχής ως εν δυνάμει δεκαδικοί ώστε να μη μπερδευόμαστε στη διαίρεση με ορίσματα τύπου 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'));
}

Για όποια άλλη διευκρίνιση είμαι στη διάθεσή σας,
Μ' ένα φιλικό νιαούρισμα για καληνύχτα,
Ο Άσπρος Γάτος

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...