Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Σχετικά έγγραφα
Διάλεξη 18η: Διαχείρηση Αρχείων

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 2 Ο. Εισαγωγή στην C Εντολές εξόδου Εντολές εισόδου Μορφοποιητές ΣΙΝΑΤΚΑΣ Ι. ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

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

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

Περιεχόμενα. Πρόλογος... 21

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

Προγραμματισμός σε C. Αρχεία κειμένου (Text files)

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ. Ασκήσεις Επανάληψης

Εργαστήριο 9: Αρχεία

Ι Αρχεία δεδομένων, μέρος δεύτερο: δυαδικά αρχεία ΙΙ Δομές δεδομένων (struct)

ιαφάνειες παρουσίασης #6 (β)

Μεθόδων Επίλυσης Προβλημάτων

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

Ενδεικτική περιγραφή μαθήματος

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

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

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

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

lab14grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ

int a[5]; a[0] a[1] a[2] a[3] a[4] 15/10/2009

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

Ενδεικτικές λύσεις και στατιστικά

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

Κεφάλαιο VΙ: Προσπέλαση Αρχείων. 5.1 Αρχεία δεδομένων.

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #3

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

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

Λύσεις για τις ασκήσεις του lab5

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

FILE *fopen(const char *fname, const char *mode) void fclose(file *f) void fflush(file *f)

Προγραμματισμός Ι (HY120)

ΑΣΚΗΣΗ 7: ΑΛΦΑΡΙΘΜΗΤΙΚΑ

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Συναρτήσεις πρότυπης βιβλιοθήκης 1. Μερικές συνήθεις συναρτήσεις βιβλιοθήκης int atoi(const char *p) int fclose(file *fp)

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

Δομημένος Προγραμματισμός

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

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

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

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

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

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

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

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

Βιβλιοθήκη stdio. Προγραμματισμός II 1

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

Τμήμα Πληροφορικής & Επικοινωνιών Δρ. Θεόδωρος Γ. Λάντζος

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΑΘΗΜΑ 3 Ο. Σταθερές-Παράμετροι-Μεταβλητές Αριθμητικοί & Λογικοί Τελεστές Δομή ελέγχου-επιλογής Σύνθετοι έλεγχοι

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

Προγραμματιστικές Ασκήσεις, Φυλλάδιο 1

Μεταβλητές τύπου χαρακτήρα

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

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

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

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Ι (HY120)

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

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

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

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

Δομημένος Προγραμματισμός

Ενώσεις δεδομένων Απαριθμητές Ψηφιακοί τελεστές Αναδρομικές συναρτήσεις

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Transcript:

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εργαστήριο 8η εβδομάδα. Κοζάνη, 26 Νοεμβρίου 2008. Οι ασκήσεις αυτής της σειράς βασίζονται σε παραδείγματα από το βιβλίο του Β. Σεφερίδη C για αρχάριους και αφορούν τη χρησιμοποίηση αρχείων κειμένου. Έχουν υποστεί μερικές αλλαγές εμπνευσμένες από άλλα παραδείγματα στο βιβλίο των Kernighan και Ritchie Η γλώσσα προγραμματισμού C. Άσκηση p7-1 Αυτό το πρόγραμμα επιτρέπει τη δημιουργία ενός σειριακού αρχείου κειμένου όπου αποθηκεύουμε εγγραφές με το όνομα και τον πληθυσμό διαφόρων χωρών (φυσικά, είναι εύκολο να το τροποποιήσουμε για να αποθηκεύσουμε άλλες και περισσότερων ειδών πληροφορίες). Επισημαίνουμε τη χρήση της δικής μας συνάρτησης get_string για την ανάγνωση αλφαριθητικών από την πρότυπη είσοδο, εμπνευσμένης από την υλοποίηση της fgets που παρουσιάζεται στο βιβλίο των K & R, σελ. 229. Στο βιβλίο του Σεφερίδη χρησιμοποιείται η συνάρτηση βιβλιοθήκης gets. Αυτή όμως, σήμερα θεωρείται κακή επιλογή από πλευράς ασφάλειας επειδή δεν ελέγχει το μέγεθος της εισόδου που δέχεται. Αυτό σημαίνει τρύπα ασφάλειας (security hole) για ένα σύστημα που χρησιμοποιεί τη gets για να πάρει δεδομένα από το χρήστη. Έτσι, μπορεί να δεχτεί αυθαίρετα μεγάλη είσοδο που θα οδηγήσει, στην καλύτερη περίπτωση σε κατάρρευση (crash) λόγω παραβίασης των επιτρεπτών ορίων της μνήμης και στη χειρότερη, σε διείσδυση λογισμικού που θα προσβάλλει το σύστημα, θα υποκλέψει πληροφορίες κλπ. Η συνάρτηση scanf από την άλλη, αν και γενικά είναι αρκετά ευέλικτη, στην περίπτωση των αλφαριθμητικών βρίσκεται κάπως πιο δύσχρηστη, ίσως επειδή ακριβώς είναι πολύ έξυπνη. Π.χ αν θέλουμε να εισάγουμε μία φράση με κενά διαστήματα, όπως Ενωμένα Αραβικά Εμιράτα, το πρώτο κενό διάστημα θα εκληφθεί ως τέλος του αλφαριθμητικού και θα περάσει μόνο η λέξη Ενωμένα. Συναρτήσεις όπως η fgets και η get_string που παρουσιάζεται εδώ, διαβάζουν συγκεκριμένο αριθμό χαρακτήρων που διαβάζονται όλοι εκτός από τον '\n' που σηματοδοτεί και τον τερματισμό της ανάγνωσης, οπότε το αλφαριθμητικό τερματίζεται με τον κενό χαρακτήρα '\0'. Έτσι, μπορούμε να δώσουμε αλφαριθμητικά με κενά, ενώ με απλό πάτημα του Enter χωρίς άλλους χαρακτήρες, μπορούμε να δώσουμε και το κενό αλφαριθμητικό που με τη σειρά του μπορεί να χρησιμοποιηθεί ως συνθήκη εξόδου, για την επαναρχικοποίηση ενός buffer κλπ. Ακόμη επισημαίνουμε ότι το πρόγραμμα μπορεί να μετατραπεί με μια ελάχιστη αλλαγή (στην εντολή ανοίγματος) ώστε να ανοίγει το αρχείο για γράψιμο (δηλαδή να καταργεί τα όποια προϋπάρχοντα περιεχόμενα) ή προσθήκη (δηλαδή να προσθέτει νέες εγγραφές χωρίς να σβήνει τις παλιές). Γράψτε το ακόλουθο πρόγραμμα σε ένα αρχείο με το όνομα π.χ. p7_1.c, μεταγλωττίστε το και εκτελέστε το: 6 1 / 9

#define SIZE 40 int main(int argc, char **argv) int population; char filename[size], country[size], tempstr[size]; /* fp=fopen(filename, "w"); */ fp=fopen(filename, "a"); while(1) printf("δώσε όνομα κράτους (ENTER για τέλος): "); if(!get_string(country,size)) printf("δώσε πληθυσμό σε εκατομμύρια: "); get_string(tempstr, SIZE); population = atoi(tempstr); fprintf(fp, "%s %d\n", country, population); fflush(fp); /* you need this if, e.g., you interrupt execution by Ctrl-C */ 6 2 / 9

Τι έξοδο παίρνετε; Τι σημαίνει η οδηγία #define; Τι κάνει η εντολή while( 1 )... και πώς φεύγουμε από αυτή τη δομή επανάληψης; Τι κάνει η συνάρτηση atoi ; Τι κάνει ο τριαδικός τελεστής (? :) στην get_string; Άσκηση p7-2 Αφού γράψαμε τα δεδομένα σε ένα αρχείο θα θέλαμε να είμαστε σε θέση να τα διαβάσουμε. Αυτό το πρόγραμμα διαβάζει τα δεδομένα από το αρχείο που δημιούργησε ή ενημέρωσε το προηγούμενο και απλώς τα εμφανίζει στην οθόνη (φυσικά, θα μπορούσαμε να κάνουμε, άλλη, πιο πολύπλοκη επεξεργασία στις εγγραφές που διαβάζονται με αυτό τον τρόπο). Γράψτε το ακόλουθο πρόγραμμα σε ένα αρχείο με το όνομα π.χ. p7_2.c, και μεταγλωττίστε το. Με γαλάζιο είναι ο κώδικας που παραμένει ίδιος με πριν και με κόκκινο τα νέα στοιχεία ή οι αλλαγές. #define SIZE 40 int main(int argc, char **argv) int population; char filename[size], country[size]; fp=fopen(filename, "r"); while(fscanf(fp, "%s %d", country, &population)!= EOF) printf("%s %d εκατομμύρια\n", country, population); 6 3 / 9

Μετά εκτελέστε το δίνοντάς του το όνομα του αρχείου που δημιουργήσατε με το προηγούμενο πρόγραμμα. Τι έξοδο παίρνετε; Πώς ερμηνεύετε την παρουσία της fscanf στη συνθήκη της while; Άσκηση p7-3 Με το πρόγραμμα p7-1, φτιάξαμε ένα αρχείο με εγγραφές ποικίλου μήκους που διαχωρίζονται μεταξύ τους από την αλλαγή γραμμής (χαρακτήρας '\n'). Αυτό το αρχείο μπορεί να προσπελαστεί σειριακά. Αν όμως έχουμε να κάνουμε με πολύ μεγάλα αρχεία, π.χ. μια βάση δεδομένων με χιλιάδες εγγραφές, θα θέλαμε να είμαστε σε θέση να βρίσκουμε πιο γρήγορα όποια εγγραφή μας ενδιαφέρει, χωρίς να διαβάσουμε πρώτα όλες τις προηγούμενες. Δηλαδή, θέλουμε να φτιάξουμε ένα αρχείο τυχαίας προσπέλασης. Αυτό θα το πετύχουμε πολύ εύκολα κάνοντας όλες τις εγγραφές να έχουν το ίδιο μήκος. Αντιγράψτε το πρόγραμμα p7_1.c σε ένα αρχείο με το όνομα π.χ. p7_1.c, και μεταγλωττίστε το. Mε γαλάζιο είναι ο κώδικας που παραμένει ίδιος με το πρώτο πρόγραμμα p7_1c, αυτής της σειράς και με κόκκινο τα νέα στοιχεία ή οι αλλαγές. Ουσιαστικά αλλάζει μόνο το αλφαριθμητικό μορφοποίησης στην εντολή fprintf, έτσι ώστε τα ονόματα να έχουν 20 διαστήματα πλάτος και στοίχιση αριστερά, ενώ οι πληθυσμοί να έχουν πλάτος 15 διαστημάτων. #define SIZE 40 6 4 / 9

int main(int argc, char **argv) int population; char filename[size], country[size], tempstr[size]; /* fp=fopen(filename, "w"); */ fp=fopen(filename, "a"); while(1) printf("δώσε όνομα κράτους (ENTER για τέλος): "); if(!get_string(country,size)) printf("δώσε πληθυσμό σε εκατομμύρια: "); get_string(tempstr, SIZE); population = atoi(tempstr); fprintf(fp, "%-20s%15d\n", country, population); fflush(fp); /* you need this if, e.g., you interrupt execution by Ctrl-C */ 6 5 / 9

Μετά εκτελέστε το δίνοντας του διαφορετικά αριθμητικά ορίσματα από τη γραμμή εντολών, όπως και προηγουμένως. Τι έξοδο παίρνετε τώρα; Άσκηση p7-4 Όπως και με το δεύτερο πρόγραμμα, θα θέλαμε να μπορούμε να διαβάσουμε τις εγγραφές του αρχείου τυχαίας προσπέλασης που δημιουργήσαμε. Αυτό θα το πετύχουμε με τη βοήθεια της fseek, αφού ξέρουμε ότι οι εγγραφές έχουν σταθερό μήκος (συγκεκριμένα, ίσο με 36). Γράψτε το επόμενο πρόγραμμα σε ένα αρχείο με το όνομα π.χ. p7_4.c, και μεταγλωττίστε το. Με γαλάζιο είναι ο κώδικας που παραμένει ίδιος σε σχέση με το δεύτερο πρόγραμμα, p7_2.c, και με κόκκινο τα νέα στοιχεία ή οι αλλαγές. #define SIZE 40 #define LENGTH 36 int main(int argc, char **argv) int population, rec_no; char filename[size], country[size], tempstr[size]; fp=fopen(filename, "r"); while(1) printf("ποια εγγραφή θέλετε να δείτε; (0 για τέλος)\n"); scanf("%d", &rec_no); if(rec_no == 0) fseek(fp, LENGTH * (rec_no -1), SEEK_SET); if(fscanf(fp, "%20s%15d\n", country, &population)!= EOF) printf("χώρα: %s\nπληθυσμός (εκ.) %d\n", country, population); else 6 6 / 9

printf("εκτός ορίων του αρχείου!\n"); Μετά εκτελέστε το δίνοντας του διαφορετικά αριθμητικά ορίσματα από τη γραμμή εντολών, όπως και προηγουμένως. Τι έξοδο παίρνετε τώρα; Γιατί η παράμετρος LENGTH της fseek έχει οριστεί να έχει την τιμή 36; Άσκηση p7-5 Οι δυνατότητες που μας παρέχουν τα αρχεία τυχαίας προσπέλασης φαίνονται καλύτερα στο επόμενο παράδειγμα όπου μπορούμε να διορθώσουμε ή ακόμη και να διαγράψουμε εγγραφές από το αρχείο μας. Πρέπει να σημειωθεί βέβαια ότι πρόκειται για λογικές και όχι φυσικές διαγραφές. Δηλαδή η εγγραφή γίνεται κενή ή μηδενίζεται, αλλά εξακολουθεί να καταλαμβάνει την αρχική μνήμη. Για πλήρη, φυσική διαγραφή, θα έπρεπε όλες οι επόμενες εγγραφές να μετακινηθούν κατά μία θέση προς τα πάνω. Γράψτε το επόμενο πρόγραμμα σε ένα αρχείο με το όνομα π.χ. p7_5.c, και μεταγλωττίστε το. Οι διαφορές με κόκκινο είναι σε σχέση με το προηγούμενο πρόγραμμα, p7_4.c. 6 7 / 9

#define SIZE 40 #define LENGTH 36 int main(int argc, char **argv) int population, rec_no, field_no; char filename[size], country[size]; fp=fopen(filename, "r+"); printf("ποια εγγραφή θέλετε να δείτε; (0 για τέλος)\n"); scanf("%d", &rec_no); fseek(fp, LENGTH * (rec_no -1), SEEK_SET); fscanf(fp, "%20s%15d\n", country, &population); printf("χώρα: %s\nπληθυσμός (εκ.) %d\n", country, population); printf("ποιο πεδίο θέλετε να διορθώσετε; 1 ή 2; (0 για διαγραφή)\nεπιλογή:"); scanf("%d", &field_no); getchar(); switch(field_no) case 0: fseek(fp, -LENGTH, SEEK_CUR); fprintf(fp, "%-20s%15d", NULL, 0); case 1: printf("δώστε το νέο όνομα: "); get_string(country, SIZE); fseek(fp, -LENGTH, SEEK_CUR); fprintf(fp, "%-20s", country); case 2: printf("δώστε το νέο πληθυσμό: "); scanf("%d", &population); fseek(fp, -LENGTH+20, SEEK_CUR); fprintf(fp, "%15d", population); 6 8 / 9

Μετά εκτελέστε το δοκιμάζοντας διαφορετικές περιπτώσεις. Κάθε φορά ανοίγετε το αρχείο για να δείτε το αποτέλεσμα (ή δείτε τα περιεχόμενά του χρησιμοποιώντας το προηγούμενο πρόγραμμα). Πώς ερμηνεύετε τα ορίσματα της fseek στις διάφορες εμφανίσεις της; 6 9 / 9