Coderr Δημοσ. 5 Νοεμβρίου 2009 Δημοσ. 5 Νοεμβρίου 2009 Καλησπέρα σε όλους , Λοιπόν έχω γράψει τον παρακάτω κώδικα, το πρόβλημα είναι ότι μου βγάζει κάποια σφάλματα .... προσπαθώ ώρες να βρω τη λυση αλλά μάταια, πιθανότατα είναι κάτι μικρό που ίσως δεν το βλέπω, αν μπορούσε κανείς να ρίξει μια ματιά και να μου πει τι τρέχει θα είμουν υπόχρεος. >#include <stdio.h> #include <stdlib.h> #define plithos 80 typedef float typos_stoixeiou; typedef typos_stoixeiou typos_pinaka[plithos]; typedef struct { int korifi; typos_pinaka pinakas; }typos_stoivas; float telestis(char symbolo, float oros1, float oros2); void dimiourgia(typos_stoivas *stoiva); int keni(typos_stoivas stoiva); void exagogi(typos_stoivas *stoiva, typos_stoixeiou *stoixeio); void othisi(typos_stoivas *stoiva, typos_stoixeiou stoixeio); main( ) { typos_stoivas stoiva; float oros1,oros2,apotelesma; char symbolo , apantisi , *metathematiki; int i; do { dimiourgia(&stoiva); metathematiki[0]='\0'; i=0; printf(“Δώσε τη παράσταση:”); while ( (symbolo=getchar( )) != '\n' ) { metathematiki[i]=symbolo; i++; if (symbolo!=' ' ) /*αγνοεί τα κενά*/ if (symbolo>='0' && symbolo<='9') { apotelesma=(float)symbolo-'0'; othisi(&stoiva,apotelesma); } else /* είναι τελεστής */ { exagogi(&stoiva,&oros2); exagogi(&stoiva,&oros1); apotelesma=telestis(symbolo,oros1,oros2); othisi(&stoiva,apotelesma); } } /* while ..!= ‘\n’ */ metathematiki[i]='\0'; exagogi(&stoiva,&apotelesma); printf("%s=5.2f\n",metathematiki,apotelesma); printf(“Θέλεις να συνεχίσεις;(Υ/Ν)\n"); scanf ("%c",&apantisi); }while (apantisi=='N' || apantisi=='n'); } float telestis (char symbolo, float oros1,oros2) { switch (symbolo) { case '+' : return (oros1+oros2); break; case '-' :return (oros1-oros2); break; case '*' : return (oros1*oros2); break; case '/' : return (oros1/oros2); break; default : printf (“Λάθος!\n”); return (-1.0); } } να επισημάνω ότι χρησιμοποιώ compiler blooshed dev c++ εαν έχει και αυτό κάποια σημασία, Thanks in advance
bab1s Δημοσ. 5 Νοεμβρίου 2009 Δημοσ. 5 Νοεμβρίου 2009 Φίλε μου το πιο πιθανό είναι να σου έχει χαλάσει η μορφοποίηση του κώδικα όταν το έκανες copy-paste στο post και είναι λίγο δύσκολο να το διαβάσεις έτσι. Για αυτό το έβαλα απευθείας στον compiler να δω τι βγάζει, χωρίς να έχω δεί αναλυτικά τον κώδικα σου. Ένα λάθος που μου έβγαλε είναι με τα quote που βάζεις στα string. Επειδή γράφεις τα μυνήματα στα Ελληνικά, τα quote σου έχουν ξεφύγει στα Ελληνικά. Σε εμένα τουλάχιστον, αυτό πετάει λάθη. Επίσης, στην υλοποίηση της συνάρτησης "telestis" πρέπει να δηλώσεις τον τύπο του τελευταίου ορίσματος. (μάλλον float) Από εκεί και πέρα, πετάει απλώς λάθη ο linker γιατί δε βρίσκει τις υλοποιήσεις των υπόλοιπων συναρτήσεων που έχεις δηλώσει. Πριν συνεχίσεις με τον κώδικα θα ήθελα να σου δώσω δυο συμβουλές. Μπορεί να φαίνεται πιο οικείο να γράφεις σε greeklish τον κώδικα και τα μυνήματα στα Ελληνικά. Πίστεψε με είναι πολύ πολύ καλύτερο να τα γράφεις όλα στα Αγγλικά. Είναι πολύ πιο εύκολο να το διαβάσεις τόσο εσύ όσο και οποιοσδήποτε άλλος. Αυτό θα το καταλάβεις καλύτερα όταν δεις τον κώδικα ολοκληρωμένο. Επίσης, θα σε γλυτώσει από κάποια περίεργα λάθη... Δεν ξέρω αν η μορφοποίηση σου χάλασε κατά τη μεταφορά, πάντως αν το έχεις έτσι και στο δικό σου editor θα δυσκολευτείς πολύ αν πας να γράψεις κάτι μεγαλύτερο... Πραγματικά, νομίζω ότι αν πας να το διαβάσεις μετά από ένα μήνα, ακόμα και εσύ θα δυσκολευτείς να βγάλεις άκρη. Είναι καλό να στοιχίζεις όμορφα τον κώδικα σου και να διατηρείς ένα στυλ. Κάνει τον κώδικα πολύ πολύ πιο έυκολο να το διαβάσεις. Και ιδιαίτερα αν πρόκειται να τον παραδώσεις για άσκηση, θέλεις αυτός που διορθώνει να το διαβάσει εύκολα! Καλή συνέχεια!
Coderr Δημοσ. 5 Νοεμβρίου 2009 Μέλος Δημοσ. 5 Νοεμβρίου 2009 Φίλε μου σ'ευχαριστώ πολύ για τις συμβουλές σου... Έχεις δίκιο...τις τροποοιήσεις αυτές τις είχα δεδομένες,το πρόβλημα παραμένει όμως... > #include <stdio.h> #include <stdlib.h> #define plithos 80 typedef float typos_stoixeiou; typedef typos_stoixeiou typos_pinaka[plithos]; typedef struct { int korifi; typos_pinaka pinakas; }typos_stoivas; float telestis(char symbolo, float oros1,float oros2); void dimiourgia(typos_stoivas *stoiva); int keni(typos_stoivas stoiva); void exagogi(typos_stoivas *stoiva, typos_stoixeiou *stoixeio); void othisi(typos_stoivas *stoiva, typos_stoixeiou stoixeio); main( ) { typos_stoivas stoiva; float oros1,oros2,apotelesma; char symbolo , apantisi , *metathematiki; int i; do { dimiourgia(&stoiva); metathematiki[0]='\0'; i=0; printf("dose ti parastasi\n"); while ( (symbolo=getchar( )) != '\n' ) { metathematiki[i]=symbolo; i++; if (symbolo!=' ' ) if (symbolo>='0' && symbolo<='9') { apotelesma=(float)symbolo-'0'; othisi(&stoiva,apotelesma); } else { exagogi(&stoiva,&oros2); exagogi(&stoiva,&oros1); apotelesma=telestis(symbolo,oros1,oros2); othisi(&stoiva,apotelesma); } } /* while ..!= ‘\n’ */ metathematiki[i]='\0'; exagogi(&stoiva,&apotelesma); printf("%s=5.2f\n",metathematiki,apotelesma); printf("theleis na sinexiseis?(Υ/Ν)\n"); scanf ("%c",&apantisi); }while (apantisi=='N' || apantisi=='n'); } float telestis (char symbolo, float oros1,float oros2) { switch (symbolo) { case '+' : return (oros1+oros2); break; case '-' :return (oros1-oros2); break; case '*' : return (oros1*oros2); break; case '/' : return (oros1/oros2); break; default : printf ("lathos!\n"); return (-1.0); } } Όταν τρέχω το πρόγραμμα βγάζει λάθη γενικά, με τν othisi και γενικά με τις συναρτήσεις... > [Linker error] undefined reference to `dimiourgia' και άλλα παρόμοια... Καμιά ιδέα?
Moderators Praetorian Δημοσ. 5 Νοεμβρίου 2009 Moderators Δημοσ. 5 Νοεμβρίου 2009 Από εκεί και πέρα, πετάει απλώς λάθη ο linker γιατί δε βρίσκει τις υλοποιήσεις των υπόλοιπων συναρτήσεων που έχεις δηλώσει. αυτό. Έχεις δηλώσει συναρτήσεις πριν τη main (σωστά γιατί η C το απαιτεί πριν να μπορείς να τις καλέσεις στον κώδικα) αλλά πουθενά δεν δίνεις την υλοποίησή τους.
Evgenios1 Δημοσ. 5 Νοεμβρίου 2009 Δημοσ. 5 Νοεμβρίου 2009 >#include <stdio.h> #include <stdlib.h> #define plithos 80 typedef float typos_stoixeiou; typedef typos_stoixeiou typos_pinaka[plithos]; typedef struct { int korifi; typos_pinaka pinakas; }typos_stoivas; float telestis(char symbolo, float oros1,float oros2); void dimiourgia(typos_stoivas *stoiva); //?? int keni(typos_stoivas stoiva);//?? void exagogi(typos_stoivas *stoiva,typos_stoixeiou *stoixeio);//?? void othisi(typos_stoivas *stoiva,typos_stoixeiou stoixeio);//?? void main() { typos_stoivas stoiva; float oros1,oros2,apotelesma; char symbolo , apantisi , *metathematiki; int i; do { dimiourgia(&stoiva); metathematiki[0]='\0';// <-- i=0; printf("dose ti parastasi\n"); while ( (symbolo=getchar( )) != '\n' ) { metathematiki[i]=symbolo;// <-- i++; if (symbolo!=' ' ) if (symbolo>='0' && symbolo<='9') { apotelesma=(float)symbolo-'0'; othisi(&stoiva,apotelesma);//?? } else { exagogi(&stoiva,&oros2);//?? exagogi(&stoiva,&oros1);//?? apotelesma=telestis(symbolo,oros1,oros2); othisi(&stoiva,apotelesma);//?? } } /* while ..!= ‘\n’ */ metathematiki[i]='\0';// <-- exagogi(&stoiva,&apotelesma);//?? printf("%s=5.2f\n",metathematiki,apotelesma);// <-- printf("theleis na sinexiseis?(Υ/Ν)\n"); scanf ("%c",&apantisi); }while (apantisi=='N' || apantisi=='n'); } float telestis (char symbolo, float oros1,float oros2) { switch (symbolo) { case '+' : return (oros1+oros2); break; case '-' :return (oros1-oros2); break; case '*' : return (oros1*oros2); break; case '/' : return (oros1/oros2); break; default : printf ("lathos!\n"); return (-1.0); } } Λυπουν κποιες συναρτησεις
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.