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

Προγραμμα σε C. Εχω κολλησει!


sk8harddiefast

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

Δημοσ.

Η ασκηση λεει:

 

Το ειδος ενως γραμματοσημου καθοριζεται απο τον χαρακτηρα Ε για εσωτερικο, Α για εξωτερικο και Τ για τοπικες αποστολες. Το γραμ/μο κατηγοριας Ε κανει 0.23 ευρω, κατη/ριας Α 0.70 ευρω και κατη/ριας Τ 0.15 ευρω. Να γραφτει προγραμμα που να ζηταει να δωσουμε ποσοστητα και ειδος γραμματοσημων που θελουμε και να υπολογιζει το ποσο που πρεπει να πληρωσουμε.

 

Εχω κανει αυτο

 

>#include <stdio.h>
#define E 0.23
#define A 0.70
#define T 0.15
int main()
{
int posothta;
char grammatoshmo;
float apotelesma;
printf ("Epilexte posothta:");
scanf ("%d" , &posothta);
printf ("Epilexte typo grammatoshmou (E,A,T):");
scanf ("%c" , &grammatoshmo);
if (grammatoshmo==E)
{	
apotelesma=posothta*grammatoshmo;
printf ("%f", apotelesma); 
}
else if (grammatoshmo==A)
{	
apotelesma=posothta*grammatoshmo;
printf ("%f", apotelesma); 
}
else
{	
apotelesma=posothta*grammatoshmo;
printf ("%f", apotelesma); 
}
}

 

 

αλλα μετα την δευτερη printf σκαει!!!! Α!!! Τρεχω BSD και το κανω με τον gcc45!

Δημοσ.
>#include <stdio.h>
#define E 0.23
#define A 0.7
#define T 0.15
int main()
{
int posothta;
char grammatoshmo;
float apotelesma;

printf ("Epilexte typo grammatoshmou (E,A,T):");
       scanf ("%c" , &grammatoshmo);
       printf ("Epilexte posothta:");
       scanf ("%d" , &posothta);

if (grammatoshmo=='E')
{       
	apotelesma=posothta*E;
	printf ("%f\n", apotelesma); 
}
else if (grammatoshmo=='A')
{       
	apotelesma=posothta*A;
	printf ("%f\n", apotelesma); 
}
else if (grammatoshmo=='T')
{       
	apotelesma=posothta*T;
	printf ("%f\n", apotelesma); 
}
else
{
	printf("Lathos epilogi.\n");
}

}

Δημοσ.

Aν την γραμμή

 

>printf ("Epilexte typo grammatoshmou (E,A,T):");

την κάνεις

>printf ("Epilexte typo grammatoshmou (E,A,T):"); _flushall();

θα τρέχει.

Αλλά το αποτέλεσμα είναι λάθος.

Έχεις μια αβλεψία στις πράξεις. Βρες την !

 

@thanos713

 

Με πρόλαβες.

Δεν έπρεπε να του το δώσεις αμέσως έτοιμο.

Τους κακομαθαίνεις έτσι...

 

-

Δημοσ.

Δεν καταλαβαινω. Γιατι αν δωσω πρωτα το

 

>printf ("Epilexte typo grammatoshmou (E,A,T):");
       scanf ("%c" , &grammatoshmo);

 

τρεχει ενω αν το δωσω δευτερο δν τρεχει!!! Ολα τα αλλα τα διορθωσα και ολος ο αλλος κωδικας ηταν ιδιος εκτως απο αυτο! Και μου εβγαζε τα ιδια μεχρι που το αλλαξα! :unsure:

Δημοσ.

Στο BSD το stdout το εχω δει πολλες φορες. Προφανως το stdin ειναι το αντιθετο! Τ ι ειναι ομως ακριβως? Δλδ οταν παταω ENTER παιρνει και αυτο μια τιμη?

Δημοσ.
Μην τονε κλαις τον αετό, όπου πετά και βρέχει,

μόνο να κλαις ένα πουλί, όπου φτερά δεν έχει.

 

Αφιερωμένο.

Δημοσ.

δεν χρειάζεται να αντιστραφεί η σειρά των scanf

 

>
............
       printf ("Epilexte posothta:");
       scanf ("%d" , &posothta);getchar();
       printf ("Epilexte typo grammatoshmou (E,A,T):");
       scanf ("%c" , &grammatoshmo);getchar();
...........

Δημοσ.

Νωμιζω πως ενα linefeed ειναι αρκετο ( scanf("%d\n",...) ) Ετσι ωστε να ξερει η xcanf οτι αυτο που θες ειναι αναμεσα απο την αρχη και το linefeed

Δημοσ.

Δηλαδη?

 

Εστω οτι θελεις να διαβασεις εναν αριθμο που εχει ενα φορματ τυπου ID-23423Z εσυ πρεπει να γτιαξεις ενα query για την scanf καπως ετσι ID-%dZ\n . Δηλαδη ο χρηστης θα σου δωσει ID-nnnZ enter και εσυ θες το nnn ως αριθμος.

Σε αυτη τη περιπτωση αν βαλεις ID-%d χωρις το Ζ η scanf θα σου διαβασει τον αριθμο, αλλα ο getpointer θα μεινει στο Ζ με αποτελεσμα οταν πας να διαβασεις την console θα αρχισεις το διαβασμα απο το Z

post-140752-0-07021300-1299330336_thumb.jpg

 

Στην εικονα η scanf 1 διαβαζει οτι ειναι υπογραμμισμενο με κοκκινο και η scanf 2 (21) οτι ειναι με πρασινο (Z\n)

Για να μην γινει αυτο, εσυ πρεπει να δηλωσεις οτι θες να διαβασεις ID-%dZ\n

Δημοσ.

Θα μπορούσε καλύτερα να υλοποιήσει κάτι που να συμπεριφέρεται σαν την

>fflush(stdin);

(δεν ενδεικνύεται η χρήση της) με μια

>while(getchar() != '\n') ;

και ακόμα καλύτερα να έψαχνε και για EOF.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...