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

Πρόβλημα στο compilation C


Coderr

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

Δημοσ.

Καλησπέρα σε όλους ,

 

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

 

 

>#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 :)

Δημοσ.

Φίλε μου το πιο πιθανό είναι να σου έχει χαλάσει η μορφοποίηση του

κώδικα όταν το έκανες copy-paste στο post και είναι λίγο δύσκολο να

το διαβάσεις έτσι.

 

Για αυτό το έβαλα απευθείας στον compiler να δω τι βγάζει, χωρίς να

έχω δεί αναλυτικά τον κώδικα σου.

 

Ένα λάθος που μου έβγαλε είναι με τα quote που βάζεις στα string. Επειδή γράφεις τα μυνήματα στα Ελληνικά, τα quote σου έχουν

ξεφύγει στα Ελληνικά. Σε εμένα τουλάχιστον, αυτό πετάει λάθη.

 

Επίσης, στην υλοποίηση της συνάρτησης "telestis" πρέπει να δηλώσεις

τον τύπο του τελευταίου ορίσματος. (μάλλον float)

 

Από εκεί και πέρα, πετάει απλώς λάθη ο linker γιατί δε βρίσκει τις

υλοποιήσεις των υπόλοιπων συναρτήσεων που έχεις δηλώσει.

 

Πριν συνεχίσεις με τον κώδικα θα ήθελα να σου δώσω δυο

συμβουλές.

 

Μπορεί να φαίνεται πιο οικείο να γράφεις σε greeklish τον κώδικα

και τα μυνήματα στα Ελληνικά. Πίστεψε με είναι πολύ πολύ καλύτερο

να τα γράφεις όλα στα Αγγλικά. Είναι πολύ πιο εύκολο να το διαβάσεις

τόσο εσύ όσο και οποιοσδήποτε άλλος. Αυτό θα το καταλάβεις καλύτερα

όταν δεις τον κώδικα ολοκληρωμένο. Επίσης, θα σε γλυτώσει από

κάποια περίεργα λάθη...

 

Δεν ξέρω αν η μορφοποίηση σου χάλασε κατά τη μεταφορά, πάντως

αν το έχεις έτσι και στο δικό σου editor θα δυσκολευτείς πολύ αν

πας να γράψεις κάτι μεγαλύτερο... Πραγματικά, νομίζω ότι αν πας

να το διαβάσεις μετά από ένα μήνα, ακόμα και εσύ θα δυσκολευτείς

να βγάλεις άκρη. Είναι καλό να στοιχίζεις όμορφα τον κώδικα σου και

να διατηρείς ένα στυλ. Κάνει τον κώδικα πολύ πολύ πιο έυκολο να

το διαβάσεις. Και ιδιαίτερα αν πρόκειται να τον παραδώσεις για άσκηση,

θέλεις αυτός που διορθώνει να το διαβάσει εύκολα!

 

Καλή συνέχεια!

Δημοσ.

Φίλε μου σ'ευχαριστώ πολύ για τις συμβουλές σου...

Έχεις δίκιο...τις τροποοιήσεις αυτές τις είχα δεδομένες,το πρόβλημα παραμένει όμως...

 

> #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
Δημοσ.

Από εκεί και πέρα, πετάει απλώς λάθη ο linker γιατί δε βρίσκει τις

υλοποιήσεις των υπόλοιπων συναρτήσεων που έχεις δηλώσει.

 

αυτό. Έχεις δηλώσει συναρτήσεις πριν τη main (σωστά γιατί η C το απαιτεί πριν να μπορείς να τις καλέσεις στον κώδικα) αλλά πουθενά δεν δίνεις την υλοποίησή τους.

Δημοσ.

>#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);
}
}

 

 

Λυπουν κποιες συναρτησεις

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

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

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