Δημοσιεύτηκε: 10 Ιαν 2011, 19:34
από PaNick
Ο κώδικάς σου δεν περνάει από compilation.

Στο δικό μου (Win7 - gcc) βγάζει τα παρακάτω με copy & paste:

Κώδικας: Επιλογή όλων

$ gcc -o test test.c
test.c:54: error: parse error before "nt"
test.c:55: error: parse error before "at"
test.c: In function `areaFunction':
test.c:60: warning: comparison between pointer and integer
test.c:60: warning: comparison between pointer and integer
test.c:60: warning: comparison between pointer and integer
test.c: At top level:
test.c:95: error: parse error before '{' token


Αυτό γενικά να ξέρεις δε βοηθά αυτούς που προσπαθούν να σε βοηθήσουν.

Με μερικές απαραίτητες ψιλοδιορθώσεις λοιπόν εντοπίζουμε το παρακάτω:

    - δεν έχει γίνει αρχικοποίηση της μεταβλητής τύπου "triangle" -> όλοι οι αριθμοί έχουν τυχαίες τιμές μόλις τη δηλώνεις = της κακομοίρας. Θα μπορούσες να χρησιμοποιήσεις π.χ.
    Κώδικας: Επιλογή όλων
    triangle trigwno={.title="", .a=0, .b=0, .c=0, .per=0, .em=0};


    - όταν πας να διαβάσεις το "trigwno.b" έχεις ερωτηματικό στον έλεγχο για το αν διάβασες αρνητικό άρα ο compiler θα μπει μέσα στον κώδικα με τα άγκιστρα μετά το while, άρα έπρεπε να σβήσεις το ερωτηματικό, όπως π.χ. στο "trigwno.a". Αυτό το λάθος δε σου επιτρέπει να διαβάσεις σωστά την πλευρά "b". Το αυτό συμβαίνει και στο "c" και στο ύψος του τριγώνου.

    - όταν συγκρίνεις την απάντηση του χρήστη στην ερώτηση για τη βάση του τριγώνου, συγκρίνεις string (η σταθερά σου) με char (η μεταβλητή σου). Ο κώδικας πρέπει να αλλάξει και να γίνουν όλες char, δλδ
    Κώδικας: Επιλογή όλων
    if ((answer!='a') || (answer!='b') || (answer!='c'))


    - είναι λάθος η λογική που έχεις στη σύγκριση για το αν η βάση του τριγώνου είναι μια από τις τρεις πλευρές. Ο σωστός κώδικας (με "&&") είναι:
    Κώδικας: Επιλογή όλων
    if ((answer!='a') && (answer!='b') && (answer!='c'))


Μετά απ΄ αυτά φαίνεται να δουλεύει.

Έχει δίκιο ο προλαλήσας με τους δείκτες. Μάλλον κάτι τέτοιο θέλει να χρησιμοποιήσεις ο καθηγητής σου.

Ο κώδικας που κατέληξα εγώ είναι:
Κώδικας: Επιλογή όλων
#include <stdio.h>
#include <stdlib.h>

typedef struct
{
char title[20];
int a;
int b;
int c;
int h;
int per;
float em;
} triangle;


triangle inputFunction(triangle t)
{
printf ("Dwste ton titlo tou trigwnou: ");
scanf ("%s", t.title);

printf("Dwste to mhkos ths pleyras a: ");
scanf("%d",&t.a);
while (t.a<0) //oso to h timh pou dw8hke einai arnhtikh ektupwsh la8ous kai ksanadiavasma timhs...
{
printf("\nTo mhkos twn pleurwn den ginetai na einai arnhtikos ari8mos \nDwste ksana to mhkos ths pleyras a: ");
scanf("%d",&t.a);
}

printf("Dwste to mhkos ths pleyras b: ");
scanf("%d",&t.b);
while (t.b<0)
{
printf("\nTo mhkos twn pleurwn den ginetai na einai arnhtikos ari8mos \nDwste ksana to mhkos ths pleyras b: ");
scanf("%d",&t.b);
}

printf("Dwste to mhkos ths pleyras c: ");
scanf("%d",&t.c);
while (t.c<0)
{
printf("\nTo mhkos twn pleurwn den ginetai na einai arnhtikos ari8mos \nDwste ksana to mhkos ths pleyras c: ");
scanf("%d",&t.c);
}

printf("Dwste to upsos toy trigwnou: ");
scanf("%d",&t.h);
while (t.h<0)
{
printf("\nTo upsos den ginetai na einai arnhtikos ari8mos \nDwste ksana to upsos toy trigwnou: ");
scanf("%d",&t.h);
}

return t; /*epistrofh dedomenwn ths sunarthshs sthn main */
}

/* sunarthsh upologismou ths perimetrou */
int perimeterFunction(triangle t)
{
return (t.a + t.b + t.c);
}

float areaFunction(triangle trigwno) /* sunarthsh upologismou emvadou */
{
char answer=' ';

printf("Poia gwnia einai h vash tou trigwnou? (a,b,c): ");
scanf("\n%c", &answer );
if ((answer!='a') && (answer!='b') && (answer!='c'))
{
printf ("\nSfalma! Sigoureuteite oti to CAPS LOCK einai off kai h glwssa EN \nPoia gwnia einai h vash tou trigwnou? (a,b,c): ");
scanf ("%c",&answer);
}
switch (answer)
{
case 'a':
trigwno.em = 1.0/2.0*trigwno.a*trigwno.h;
break;
case 'b':
trigwno.em = 1.0/2.0*trigwno.b*trigwno.h;
break;
case 'c':
trigwno.em = 1.0/2.0*trigwno.c*trigwno.h;
break;
}
return trigwno.em;
}

int main()
{

triangle trigwno={.title="",.a=0,.b=0,.c=0, .per=0, .em=0};

trigwno=inputFunction(trigwno);

trigwno.per= perimeterFunction(trigwno);

trigwno.em= areaFunction(trigwno);

printf("%f\n", trigwno.em);

return 0;
}


Έχω να γράψω καιρό οπότε μην τον πολυεμπιστευτείς.

Χρήσιμο εργαλείο για όλους τους προγραμματιστές είναι ο debugger (gdb χρησιμοποιώ εγώ), ο οποίος μπορεί να σου αναδείξει βήμα - βήμα την εκτέλεση ενός προγράμματος.

Μια τελική συμβουλή: ΔΙΑΒΑΣΕ ΤΟ MANUAL ΤΗΣ ΓΛΩΣΣΑΣ ΠΟΥ ΕΧΕΙΣ ΕΠΙΛΕΞΕΙ ΝΑ ΠΡΟΓΡΑΜΜΑΤΙΖΕΙΣ.