LAB1 ΛΥΣΗ. Ευρετήριο απαντήσεων ανά τµήµα: Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης

Σχετικά έγγραφα
lab1_grades Α.Μ. ΒΑΘΜΟΣ ΣΧΟΛΙΑ

H ΓΛΩΣΣΑ C. Μάθηµα 1: Το Πρώτο µας Πρόγραµµα σε C. ηµήτρης Ψούνης

lab2 -Στην printf να βάζεις \n έτσι ώστε να αλλάζει γραµµή όποτε σου εµφανίζει κάποιο µήνυµα.

Προγραµµατισµός Ι (ΗΥ120)

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Εισαγωγή στην γλώσσα προγραμματισμού C

ΑΣΚΗΣΗ 2: ΔΟΜΗ ΠΡΟΓΡΑΜΜΑΤΟΣ C, ΧΕΙΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΚΑΙ ΣΥΝΑΡΤΗΣΕΙΣ ΕΙΣΟΔΟΥ ΚΑΙ ΕΞΟΔΟΥ

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

Προγραμματισμός Ι (ΗΥ120)

char name[5]; /* define a string of characters */

ΕΡΓΑΣΤΗΡΙΟ 2 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Εργαστήριο 2. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

scanf() scanf() stdin scanf() printf() int float double %lf float

ΕΡΓΑΣΤΗΡΙΟ 1 ΕΙΣΑΓΩΓΗ ΣΤΗ C. Τµήµα Πληροφορικής και Τηλεπικοινωνιών

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Προγραμματισμός Ι. Δείκτες. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 2.5: Τύποι εδοµένων, Τελεστές και Αριθµητικές Εκφράσεις. ( ιαλέξεις 5-6) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

C: Από τη Θεωρία στην Εφαρµογή 2 ο Κεφάλαιο

int array[10]; double arr[5]; char pin[20]; Προγραµµατισµός Ι

Κεφάλαιο Αλφαριθµητικές Σειρές Χαρακτήρων (Strings)

- Σωστή χρήση του προσδιοριστή const για την σταθερά pi. Καλό θα ήταν επιλέξετε κεφαλαία γράµµατα για το όνοµα της σταθεράς.

Προγραμματισμός Ι (ΗΥ120)

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

Εξοικείωση με το πρόγραμμα DEV C++ Επικοινωνία Χρήστη - Υπολογιστή

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal 1 ο Μέρος σηµειώσεων (Ενότητες 8.1 & 8.2 σχολικού βιβλίου)

abistarakis PASS - Σωστή κατασκευή tgz και ονοµασία αρχείων

Επεξεργασία Αρχείων Κειµένου

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραµµατισµός Ι Εισαγωγή Πανεπιστήµιο Πελοποννήσου Τµήµα Πληροφορικής & Τηλεπικοινωνιών Προγραµµατισµός Ι Νικόλαος Δ. Τσελίκας

Προγραμματισμός Ι (ΗΥ120)

ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

Η γλώσσα προγραμματισμού C

Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6)

lab7 PASS -Δεν έχεις καθόλου σχόλια! Διάβασε το φυλλάδιο. PASS -Πολύ καλή εργασία µε σωστά και επεξηγηµατικά σχόλια. -Πρόσεξε την στοίχισή σου!

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 1 Εισαγωγή στη C. Σοφία Μπαλτζή s.mpaltzi@di.uoa.gr

a = 10; a = k; int a,b,c; a = b = c = 10;

Η πρώτη παράμετρος είναι ένα αλφαριθμητικό μορφοποίησης

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

ΦΥΣ-151. Ηλεκτρονικοί Υπολογιστές Ι (FORTRAN 77) (Άνοιξη 2004)

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

if(συνθήκη) {... // οµάδα εντολών } C: Από τη Θεωρία στην Εφαρµογή 5 ο Κεφάλαιο

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Διαδικασιακός Προγραμματισμός

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Διαδικασιακός Προγραμματισμός

ΑΕΜ ή username. Sheet2

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (Programming in the large)

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Διαδικασία Ανάπτυξης Λογισμικού

Είναι πολύ πιθανό να παραξενευτείτε βλέποντας σύµβολα όπως { και *ptr++.

printf Οι κωδικοί (format codes) του printf για διάφορους τύπους δεδοµένων είναι:

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εισαγωγή στον Προγραμματισμό

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Προγραμματισμός Η/Υ (ΤΛ2007 )

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ & ΥΠΟΛΟΓΙΣΤΙΚΗ ΦΥΣΙΚΗ

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Βαθμός Σχόλιο. lab3_grades

Sheet3_2. Τα literals (3.0, 1.5, κτλ) πρέπει να ορίζονται ως σταθερές.

Ανάπτυξη και Σχεδίαση Λογισμικού

lab3grades - Δεν παραδόθηκε. - Προσπαθήστε να κάνετε την άσκηση στο σπίτι.

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εισαγωγή στον Προγραμματισμό

TMHMA TEXNΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΤΗΛ/ΝΙΩΝ Προγραμματισμός Ι ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ , Α ΕΞΑΜΗΝΟ Βασίλης Μποζαντζής. Βασίλης Μποζαντζής

ΕΡΓΑΣΙΑ ΕΞΑΜΗΝΟΥ - ΜΕΡΟΣ Γ'

Δομημένος Προγραμματισμός (ΤΛ1006)

Προγραµµατισµός Ι Εργαστήριο 6ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 6 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

5 &6. Τύποι δεδομένων, τελεστές και

Περιεχόμενα. Κεφάλαιο 2.5: Τύποι Δεδομένων, Τελεστές και Αριθμητικές Εκφράσεις. (Διαλέξεις 5-6) Τύποι Δεδομένων. Τελεστές. Αριθμητικές εκφράσεις

Δομή Προγράμματος C++, Χειρισμός Μεταβλητών και Συναρτήσεις Εισόδου - Εξόδου

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

ΗΥ-150. Πίνακες (Arrays)

ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κεφάλαιο 8 : H γλώσσα προγραµµατισµού Pascal

lab5 -Ο κώδικάς σου είναι σωστός αλλά από εδώ και στο εξής προσπάθησε να βάζεις σχόλια στην µορφή που ζητάει το φυλλάδιο

Προγραμματισμός Ι. Χαρακτήρες. Πανεπιστήμιο Πελοποννήσου Τμήμα Πληροφορικής & Τηλεπικοινωνιών

ΣΕΤ ΑΣΚΗΣΕΩΝ 1. Προθεσµία: 10/11/12, 22:00

Προγραμματισμός Ι (ΗΥ120)

ΗΥ-150. Προγραμματισμός

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Κεφάλαιο Αλφαριθμητικές Σειρές Χαρακτήρων (Strings) (Διάλεξη 20) 1) Strings στη C

3.1 Αριθμητικοί και Λογικοί Τελεστές, Μετατροπές Τύπου (Casting)

for for for for( . */

Η-Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ. Εργαστήριο 2 Εντολές Εισόδου/Εξόδου Τελεστές. Δρ. Γιώργος Λαμπρινίδης 23/10/2015 Η - Υ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ 1

Προγραμματισμό για ΗΜΥ

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/10, 23:59

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

ΗΥ101: Εισαγωγή στην Πληροφορική

Οι δείκτες στη γλώσσα C

2. Δήλωση μεταβλητών. #include <avr/io.h> #include <util/delay.h> unsigned char i=0xa0; register unsigned char i asm("r3");

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Κεφάλαιο Πίνακες Ι. ( ιάλεξη 15) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Transcript:

LAB1 ΛΥΣΗ Ευρετήριο απαντήσεων ανά τµήµα: Τµήµα 1 Τµήµα 2 Τµήµα 3 Τµήµα 4 Τµήµα 5 Ευρετήριο απαντήσεων ανά µήνυµα λάθους/προειδοποίησης error: invalid preprocessing directive #includes error: syntax error before... error: studio.h: No such file or directory warning: division by zero warning: implicit declaration of function... error: empty character constant warning: "/*" within comment error: invalid lvalue in assignment error: redeclaration of 'l' with no linkage \ previous declaration of 'l' was here error: #include expects "FILENAME" or <FILENAME> error: syntax error before 'double' error: invalid suffix... on integer constant

Τµήµα 1 error: invalid preprocessing directive #includes Το µήνυµα εµφανίστηκε στη γραµµή #includes<stdio.h> και µας λέει ότι η directive που έχουµε χρησιµοποιήσει δεν είναι έγκυρη. Αυτό συνήθως σηµαίνει πως έχουµε κάποιο τυπογραφικό λάθος. Πράγµατι, έχουµε γράψει #includes αντί για #include error: syntax error before... Αυτό το µήνυµα είναι αρκετά γενικό και δε δίνει αρκετές πληροφορίες για το τι έχουµε κάνει λάθος, οπότε η µόνη µας επιλογή είναι να διαβάσουµε προσεκτικά τον κώδικα που προηγείται του σηµείου όπου ανιχνεύτηκε το λάθος. Στο lab1.c του τµήµατος 1 η γραµµή του λάθους και η αµέσως προηγούµενη είναι: int main (int argc, char *argv[]) ( int tempf, tempc; Προσεκτική εξέταση του κώδικα µας δείχνει το λάθος στην πρώτη γραµµή: Αντί για το αριστερό άγκιστρο που προσδιορίζει το σώµα της main, υπάρχει παρένθεση. Στο lab1.c του τµήµατος 2 η γραµµή του λάθους είναι: int main (int argc, char *argv[] { Προσεκτική εξέταση του κώδικα µας δείχνει το σε αυτή τη γραµµή: Λείπει µια δεξιά παρένθεση πριν το άγκιστρο. Αυτό το µήνυµα εµφανίζεται όταν ο compiler ανιχνεύει µια µεταβλητή η οποία δε φαίνεται να έχει δηλωθεί. Υπάρχουν αρκετά ενδεχόµενα για το ποιο είναι το ακριβές λάθος: Έχουµε ξεχάσει να δηλώσουµε τη συγκεκριµένη µεταβλητή, ή Την έχουµε δηλώσει, αλλά έχουµε κάποιο τυπογραφικό λάθος στο σηµείο που τη χρησιµοποιούµε Η µεταβλητή είναι εκτός εύρους (περισσότερα σε επόµενο µάθηµα) Το ποια περίπτωση είναι εξαρτάται από το τι θέλουµε να κάνει το πρόγραµµα στο συγκεκριµένο σηµείο. Στο lab1.c των τµηµάτων 1 και 2 και 4 το λάθος εµφανίστηκε στη γραµµή: return O; Γνωρίζουµε ότι η εντολή return στη main πρέπει να επιστρέφει µια ακέραια τιµή. Αυτή συνήθως είναι το µηδέν, αλλά µπορεί να είναι και οποιαδήποτε έκφραση αποτιµάται σε ακέραιο. Αφού ο compiler παραπονιέται για µεταβλητή, συµπεραίνουµε πως το O είναι όνοµα µεταβλητής (και για την ακρίβεια το κεφαλαίο γράµµα o), κι όχι ο αριθµός µηδέν. Ένα επιπλέον στοιχείο προς αυτό το συµπέρασµα είναι το γεγονός πως το O δεν είναι χρωµατισµένο από τον επεξεργαστή κειµένου µας µε το χρώµα που χαρακτηρίζει αριθµητικά literals. Κάποια οµάδα "διόρθωσε" το λάθος µε το να συµπεριλάβει το O σε ' ' (δηλαδή έγραψε return 'O';). Αυτό δεν είναι σωστή διόρθωση, αν και ικανοποιεί τον compiler. Το 'O' είναι µια τιµή

τύπου χαρακτήρας (char). Οι χαρακτήρες στη C αναπαρίστανται ως ακέραιοι (ASCII κωδικοί), οπότε το return 'O';, όσον αφορά τον compiler, είναι ισοδύναµο µε το return 79; διότι ο κωδικός ASCII του κεφαλαίου o είναι 79. Στο lab1.c του τµήµατος 3 το λάθος εµφανίστηκε στη γραµµή int tempf; tempc; η οποία δηλώνει τις µεταβλητές του προγράµµατος. Παρατηρούµε πως για τη µεταβλητή tempc δεν έχει προσδιοριστεί κάποιος τύπος. Κατά πάσα πιθανότητα, ο προγραµµατιστής έβαλε κατά λάθος ερωτηµατικό αντί για κόµµα µετά το tempf. Η διόρθωση είναι int tempf, tempc; Εναλλακτικά, θα µπορούσαµε να προσδιορίσουµε τύπο int για το tempc αλλά τότε θα έπρεπε να βάλουµε τη δήλωση στην επόµενη γραµµή (µην ξεχνάτε: µια εντολή ανά γραµµή!) ως εξής: int tempf; int tempc; Επίσης στο lab1.c του τµήµατος 3, το ίδιο λάθος εµφανίζεται στη γραµµή tempc = (tenpf- 32)*5/9; Εδώ όµως το πρόβληµα δεν είναι ότι ξεχάσαµε να δηλώσουµε µια µεταβλητή, αλλά ότι κάναµε τυπογραφικό λάθος κατά τη χρήση µιας ήδη δηλωµένης µεταβλητής (αντί για tempf γράψαµε tenpf). Συµπέρασµα: Όταν βλέπετε αυτό το µήνυµα λάθους, δε σηµαίνει απαραίτητα ότι πρέπει να δηλώσετε τη µεταβλητή για την οποία σας παραπονιέται. Αντίθετα, πρέπει να ΜΕΛΕΤΗΣΕΤΕ τον κώδικα για να εξακριβώσετε αν όντως ξεχάσατε τη δήλωση ή αν το µήνυµα οφείλεται σε κάτι διαφορετικό όπως πχ τυπογραφικό λάθος. Στο lab1.c του τµήµατος 5 το µήνυµα εµφανίζεται σε δύο σηµεία. Στην πρώτη περίπτωση έχουµε ορθογραφικό λάθος στο όνοµα µιας µεταβλητής (radious αντί για radius). Στη δεύτερη περίπτωση έχουµε λάθος στο όνοµα µιας σταθεράς: αντί για κεφαλαίο i έχουµε χρησιµοποιήσει τον αριθµό 1. Το κεφαλαίο Ι, ο αριθµός ένα και το µικρό ελ είναι γενικά χαρακτήρες που µοιάζουν πολύ, οπότε πρέπει πάντα να αποφεύγουµε να τους χρησιµοποιούµε µε τρόπο που µπορεί να προκαλέσει σύγχιση.

Τµήµα 2 error: studio.h: No such file or directory Το µήνυµα προσδιορίζει ότι δεν υπάρχει το αρχείο που προσπαθούµε να κάνουµε include. Στην περίπτωση που το αρχείο που θέλουµε να κάνουµε include είναι της στανταρντ βιβλιοθήκης, τότε σηµαίνει πως έχουµε κάνει κάποιο λάθος στο όνοµα ή δεν έχουµε χρησιµοποιήσει < >. Θα επανέλθουµε σε αυτό το µήνυµα και πιθανές διορθώσεις όταν µάθετε πώς να κατασκευάζετε δικά σας header files. Στη συγκεκριµένη περίπτωση πρόκειται για ορθογραφικό λάθος. Το αρχείο λέγεται stdio.h και όχι studio.h error: syntax error before... Αυτό το µήνυµα σηµαίνει ότι έχουµε ξεχάσει να "κλείσουµε" µια συµβολοσειρά. Είναι εύκολο να το εντοπίσουµε και χωρίς χρήση compiler, γιατί ο επεξεργαστής κειµένου που χρησιµοποιούµε δίνει συγκεκριµένο χρώµα στις συµβολοσειρές. Αν δούµε ότι υπάρχει κοµµάτι του κώδικα στο χρώµα συµβολοσειράς χωρίς να πρέπει, ξέρουµε αµέσως ότι κάπου πιο πριν έπρεπε να είχαµε κλείσει τη συµβολοσειρά χρησιµοποιώντας " (double quote). Στην άσκηση του τµήµατος 2, έπρεπε να προσθέσουµε " πριν τη δεξιά παρένθεση του printf. warning: division by zero Αυτό το µήνυµα µας προειδοποιεί για διαίρεση µε το µηδέν. Το σχετικό κοµµάτι κώδικα είναι tempc = (tempf-32)*5/0; Για να διορθώσουµε το λάθος, πρέπει να γνωρίζουµε τον τύπο µετατροπής θερµοκρασίας, ο οποίος περιγράφεται στα σχόλια του προγράµµατος.

Τµήµα 3 warning: implicit declaration of function... Αυτό το µήνυµα σηµαίνει ότι χρησιµοποιούµε µια συνάρτηση η οποία δεν έχει δηλωθεί. Αν πρόκειται για συνάρτηση βιβλιοθήκης (όπως στο συγκεκριµένο µήνυµα όπου αναφέρεται στην printf) τότε εξετάζουµε τα #include και βεβαιωνόµαστε ότι έχουµε συµπεριλάβει το αρχείο µε τις κατάλληλες δηλώσεις συναρτήσεων. Στη συγκεκριµένη άσκηση, πρέπει να προσθέσουµε #include<stdio.h> στην αρχή του προγράµµατος. error: empty character constant Ένα literal που είναι χαρακτήρας περικλείεται από single quotes (µονά εισαγωγικά). Αν ο compiler δει δύο διαδοχικά single quotes χωρίς χαρακτήρα ανάµεσά τους, τότε εµφανίζει το παρακάτω λάθος. Επίσης, εµφανίζει προειδοποίηση αν δει περισσότερους από έναν χαρακτήρες µέσα σε single quotes (warning: multi-character character constant). Στο συγκεκριµένο πρόγραµµα, πρέπει να αντικαταστήσουµε τα δύο single quotes από ένα double quote ("). Επίσης, σηµειώστε πως το γεγονός ότι το string του printf δεν είναι χρωµατισµένο κόκκινο όπως θα περιµέναµε, µας δίνει µια νύξη για το ότι κάτι δεν πάει καλά µε αυτό.

Τµήµα 4 warning: "/*" within comment Δεδοµένου ότι οι χαρακτήρες /* ξεκινούν ένα σχόλιο, το παραπάνω µήνυµα υπονοεί ότι προσπαθούµε να "φωλιάσουµε" ένα σχόλιο µέσα σε ένα άλλο. Μπορεί να έχουµε κάνει κυριολεκτικά αυτό το λάθος ή απλά να έχουµε ξεχάσει να κλείσουµε ένα προηγούµενο σχόλιο. Σε κάθε περίπτωση, πρέπει να κοιτάξουµε στις προηγούµενες γραµµές κώδικα για να δούµε τι ακριβώς έχει συµβεί και να κάνουµε την κατάλληλη διόρθωση. Το γεγονός ότι ο επεξεργαστής κειµένου δίνει ξεχωριστό χρώµα στα σχόλια (το Kate τα εµφανίζει γκρι) µπορεί να µας βοηθήσει πολύ στον εντοπισµό του λάθους. error: invalid lvalue in assignment Ο όρος lvalue αναφέρεται σε οντότητες που µπορούν να εµφανιστούν αριστερά ενός τελεστή ανάθεσης (lvalue = left value). Με βάση αυτά που έχετε µάθει µέχρι τα πρώτα 2 εργαστήρια, lvalues µπορεί να είναι µόνο µεταβλητές. Οπότε το παραπάνω µήνυµα σηµαίνει ότι εµφανίστηκε µη-µεταβλητή στο αριστερό µέρος ενός =. Πράγµατι ο σχετικός κώδικας είναι 1 = l; Αριστερά από το = βρίσκεται ο αριθµός ένα, ενώ δεξιά η µεταβλητή l. Έπρεπε να είναι ανάποδα. Εδώ να σηµειώσουµε το πόσο σηµαντικό είναι να δίνουµε περιγραφικά ονόµατα στις µεταβλητές µας όχι µόνο για να είναι κατανοητός ο κώδικας αλλά και για να αποφεύγουµε λάθη όπως το παραπάνω: ο αριθµός ένα και το αγγλικό γράµµα ελ µοιάζουν πάρα πολύ και είναι εύκολο να τα µπερδέψουµε. Μεταβλητές όπως l, l1 ll κτλ δεν πρέπει να χρησιµοποιούνται ποτέ! error: redeclaration of 'l' with no linkage \ previous declaration of 'l' was here Αυτό το µήνυµα εµφανίζεται όταν µια µεταβλητή έχει δηλωθεί περισσότερες από µία φορές στο ίδιο εύρος (scope). Είναι πολύ σηµαντικό να διαβάσετε προσεκτικά το πρόγραµµα και να έχετε καταλάβει τι λειτουργία του, για να µπορέσετε να ανιχνεύσετε πού έγινε το λάθος. Πιθανώς δηλώσατε µια µεταβλητή χωρίς να προσέξετε ότι υπάρχει ήδη άλλη µε το ίδιο όνοµα. Πιθανώς κάνατε κάποιο τυπογραφικό λάθος στο όνοµα της δεύτερης µεταβλητής, και τυχαίνει να είναι ίδιο µε το όνοµα της πρώτης. Στο συγκεκριµένο παράδειγµα, έχουµε ξαναγράψει κατά λάθος τις δηλώσεις κάποιων µεταβλητών χωρίς να χρειάζεται, οπότε αρκεί να σβήσουµε ολόκληρη τη γραµµή 19.

Τµήµα 5 warning: "/*" within comment βλ. σχόλια στο τµήµα 4 error: #include expects "FILENAME" or <FILENAME> Λάθος στη σύνταξη του #include. Το όνοµα του αρχείο πρέπει να περικλείεται σε < > αν πρόκειται για header file της C ή σε " " αν πρόκειται για header file που κατασκευάσατε εσείς (θα µάθετε αργότερα πώς). error: syntax error before 'double' Αυτό το µήνυµα δε µας δίνει πολλές πληροφορίες και µπορεί να σηµαίνει οτιδήποτε. Εξετάζουµε προσεκτικά τον κώδικα για να δούµε πού µπορεί να είναι το λάθος. Στη συγκεκριµένη περίπτωση έχουµε κόµµα αντί για ερωτηµατικό στο τέλος της προηγούµενης εντολής. Οι συµβολοσειρές (strings) σε ένα πρόγραµµα C πρέπει να περικλείονται σε double quotes (διπλά εισαγωγικά). Το παραπάνω µήνυµα σηµαίνει πως στο πρόγραµµα εµφανίζεται µια συµβολοσειρά στην οποία δεν "κλείνουν" τα double quotes. Ένας εύκολος τρόπος να εντοπίσουµε το λάθος χωρίς καν να δούµε το µήνυµα είναι από το χρώµα που δίνει ο επεξεργαστής κειµένου στον κώδικα. Στο Kate οι συµβολοσειρές εµφανίζονται µε κόκκινο. Αν έχουµε ξεχάσει το ", τότε θα είναι κόκκινος περισσότερος κώδικας από ότι πρέπει. error: invalid suffix... on integer constant Το µήνυµα µας λέει ότι έχουµε µια ακέραια σταθερά στο πρόγραµµά µας (το 2 στη συγκεκριµένη περίπτωση) η οποία ακολουθείται από κάτι που δεν επιτρέπεται να εµφανίζεται µετά από αριθµό. Παρατηρούµε πως στο σηµείο µε το λάθος γράφουµε 2PI. Για να διορθώσουµε το πρόβληµα πρέπει να έχουµε καταλάβει τι ακριβώς πρέπει να κάνει το πρόγραµµα σε αυτό το σηµείο. Από τα σχόλια του προγράµµατος βλέπουµε πως πρέπει να υπολογίζουµε την περίµετρο ενός κύκλου, άρα συµπεραίνουµε πως το σωστό είναι 2*PI Εδώ να σηµειώσουµε πως σε κάποιες περιπτώσεις επιτρέπεται να εµφανιστεί συγκεκριµένο γράµµα µετά από αριθµό. Για παράδειγµα το 2U σε ένα πρόγραµµα σηµαίνει πως θέλουµε ο αριθµός 2 να χρησιµοποιηθεί στο συγκεκριµένο σηµείο ως unsigned integer.