Lomar Δημοσ. 6 Νοεμβρίου 2006 Δημοσ. 6 Νοεμβρίου 2006 Χαίρεται, έχω το εξής πρόβλημα για τη σχολή: "Να γίνει πρόγραμμα με χρήση συνάρτησης που αφού δέχεται τις τιμές τριών μεταβλητών a,b και c να μεταφέρει την τιμή του α στο b του b στο c και του c στο a" Λύση δική μου Πρώτη: > #include <stdio.h> void metaf (float, float, float); float a1,b1,c1; main () { float a,b,c,a1,b1,c1; printf ("\n Dwse treis arithmous: \n"); scanf ("%.f%.f%.f",&a,&b,&c); metaf (a,b,c); printf ("\n a=%.2f, b=%.2f, c=%.2f \n",a1,b1,c1); } void metaf (float a, float b, float c) { b1=a; c1=b; a1=c; } Λύση δική μου, Δεύτερη, με τη χρήση διευθύνσεων μνήμης > #include <stdio.h> void metatr(float *, float *, float *); main () { float a,b,c; printf("\n Dwse 3 arithmous: \n"); scanf("&f&f",&a,&b,&c); metatr(&a,&b,&c); printf("\n a=%.2f, b=%.2f, c=%.2f \n",a,b,c); } void metatr(float *a, float *b, float *c) { float t1,t2; t1=*b; t2=*c; *b=*a; *c=t1; *a=t2; } το πρόγραμμα και στις 2 περιπτώσεις μου τρέχει κανονικότατα, χωρίς λάθη ή warnings, ΑΛΛΑ εκεί που πρέπει να μου εμφανίσει τις νέες μεταβλητές a, b και c, μου βγαίνουν τα εξής: a<=n, b<=n, c<=n Press any key to continue Επαναλαμβάνω πως το αποτέλεσμα και με τους 2 κώδικες είναι ΑΚΡΙΒΩΣ το ίδιο... Έχω παλαβώσει και δεν μπορώ να καταλάβω τι ακριβώς κάνω λάθος, σας παρακαλώ βοηθήστε με, γιατί αύριο έχω εργαστήριο και αν δε καταλάβω αυτά μετα με τις ανάδρομες σχέσεις θα χάσω τον μπούσουλα! thnks in advance...
sotirakis.net Δημοσ. 6 Νοεμβρίου 2006 Δημοσ. 6 Νοεμβρίου 2006 Στην δική σου λύση, παίρνεις 2 αριθμούς με την scanf(). Και τους παίρνεις με ανορθόδοξο (sic) τρόπο... Άλλαξε το scanf("&f&f",&a,&b,&c); και κάν'το scanf("%f %f %f", &a, &b, &c); Ο τελεστής & σημαίνει θέση μνήμης και καλό θα ήταν να μην τον χρησιμοποιείς αέρα-πατέρα... Ουσιαστικά, εσύ θέλεις με την scanf() να διαβάσεις 3 float αριθμούς (%f, %f, %f) και να αποθηκεύσεις τις τιμές που θα δώσεις στις μεταβλητές a, b, c (πιο συγκεκριμένα, στις θέσεις μνήμης τους (&a, &b, &c) ). Καλώς ήρθες στον μαγικό κόσμο τις C !
Lomar Δημοσ. 6 Νοεμβρίου 2006 Μέλος Δημοσ. 6 Νοεμβρίου 2006 Σε ευχαριστώ πολύ φίλε μου, αλλά τα λάθη (που καταλάθος τα έκανα) που διόρθωσα δεν άλλαξαν το τελικό αποτέλεσμα.... Καλώς σας βρήκα πάντως!!!
georgemarios Δημοσ. 7 Νοεμβρίου 2006 Δημοσ. 7 Νοεμβρίου 2006 λοιπον, στο πρωτο παραδειγμα εχεις ορισει τις μεταβλητες a1, b1, c1 ως global αλλα ΚΑΙ μεσα στο main. η συναρτηση metaf δινει τιμες στις global a1...c1 αλλα η τελικη printf στο main τυπωνει τις τοπικες a1....c1 (ειναι διαφορετικες μεταβλητες, ασχετα αν εχουν το ιδιο ονομα) επισης στο scanf αλλαξε τα %.f με %f (βγαλε την τελεια) στο δευτερο παραδειγμα, η αλλαγη που σου ειπε ο σωτηρακης πρεπει να λυνει το προβλημα ειναι το τελευταιο μου ποστ στο insomnia για τις επομενες 3 βδομαδες. Παρουσιαζομαι αυριο στην κορινθο να υπηρετησω την πατριδα....... Τα λεμε .........
Lomar Δημοσ. 9 Νοεμβρίου 2006 Μέλος Δημοσ. 9 Νοεμβρίου 2006 thnks georgemarios!!! Τελικά έκανα τα τελευταία και είχα πάλι το ίδιο πρόβλημα, αλλά τελικά στον compiler μου φαίνετε πως δεν έχω ρυθμίσει κάτι σωστά, γιατί στον compiler (σε linux παρακαλώ) της σχολής το πρόγραμμα έτρεχε κανονικά!! thnks!!!
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.