ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ
Τμήμα Ηλεκτρονικών Μηχ. και Μηχ. Υπολογιστών

ΛΟΓ 102: Τεχνολογία Λογισμικού Ι
http://www.softlab.ntua.gr/~nickie/TUC/log102/

Φροντιστηριακές Ασκήσεις 29/3/2000

Το υλικό των φροντιστηριακών ασκήσεων που βρίσκεται σε αυτή τη σελίδα προετοιμάστηκε από τους βοηθούς του μαθήματος, Φώτη Καζάση (fotis@ced.tuc.gr) και Κυριάκο Πούτο (kyriakos@ced.tuc.gr), κατόπιν συνεννοήσεως με το διδάσκοντα.


Αρχεία κειμένου

Διάβασμα λέξης

#include "stdio.h"

void main ()
{
   FILE *fp1;
   char oneword[100];
   char c;

   fp1 = fopen("\\PROJECTS\\TENLINES.TXT","rt"); 
   do {
      c = fscanf(fp1,"%s", oneword);		 
      printf("%s\n", oneword);			
   }  while (c != EOF);		 
   fclose(fp1);
}

Εντοπισμός προβλήματος εμφάνισης επιπλέον γραμμών στην έξοδο. Λύση προβλήματος:

#include "stdio.h"

void main ( )
{
   FILE *fp1;
   char oneword[100];
   char c; 

   fp1 = fopen("\\PROJECTS\\TENLINES.TXT","rt");
   do {
      c = fscanf(fp1,"%s", oneword);		  
      if (c != EOF)   
         printf("%s\n", oneword);		 
   }  while (c != EOF);				 
   fclose(fp1);
}

Διάβασμα γραμμής

#include "stdio.h"

void main( )
{
   FILE *fp1;
   char oneword[100];
   char *c;

   fp1 = fopen("TENLINES.TXT","rt"); 
   do {  
      c = fgets(oneword, 100 ,fp1); 
      if (c != NULL)   
         printf("%s", oneword); 
   }  while (c != NULL);		 
   fclose(fp1);
}

Δυαδικά αρχεία αποτελούμενα από εγγραφές

Χρήσιμες συναρτήσεις

Δημιουργία αρχείου εγγραφών

#include "stdio.h"
#include "string.h"

struct record {
   char   last_name[20];
   char   first_name[15];
   int    age;
};

typedef struct record person;

FILE *people;

void main ()
{
   person employee;

   people = fopen("PEOPLE.DAT", "wb");
   strcpy(employee.last_name, "ΚΑΖΑΣΗΣ");
   strcpy(employee.first_name, "ΦΩΤΗΣ");
   employee.age = 33;
   fwrite(&employee, sizeof(employee), 1, people);
   strcpy(employee.last_name, "ΠΟΥΤΟΣ");
   strcpy(employee.first_name, "ΚΥΡΙΑΚΟΣ");
   employee.age = 28;
   fwrite(&employee, sizeof(employee), 1, people);
   strcpy(employee.last_name, "ΠΑΠΑΣΠΥΡΟΥ");
   strcpy(employee.first_name, "ΝΙΚΟΣ");
   employee.age = 30;
   fwrite(&employee, sizeof(employee), 1, people);
   fclose(people);
}

Σειριακή προσπέλαση αρχείου εγγραφών

#include "stdio.h"
#include "string.h"

struct record {
   char   last_name[20];
   char   first_name[15];
   int    age;
};

typedef struct record person;

FILE *people;

void main ()
{
   person employee;
   people = fopen("PEOPLE.DAT", "rb");
   while (!feof(people)) {
      fread(&employee, sizeof(employee), 1, people);
      printf("Surname..........: %s\n", employee.last_name);
      printf("Given name.......: %s\n", employee.first_name);
      printf("Age..............: %d years\n", employee.age);
   }
   fclose(people);
}

Τυχαία προσπέλαση αρχείου εγγραφών

#include "stdio.h"
#include "string.h"

struct record {
   char   last_name[20];
   char   first_name[15];
   int    age;
};

typedef struct record person;

FILE *people;

void main ()
{
   person employee;
   int rec, result;

   people = fopen("PEOPLE.DAT", "r+b");
   printf("Which record do you want [0-2]? ");
   scanf("%d", &rec);	
   while (rec >= 0) 	{
      fseek(people, rec*sizeof(employee), SEEK_SET);
      result = fread(&employee, sizeof(employee), 1, people);
      if (result==1) {
         printf("\nRECORD %d\n", rec);
         printf("Surname..........: %s\n", employee.last_name);
         printf("Given name.......: %s\n", employee.first_name);
         printf("Age..............: %d years\n", employee.age);
      }
      else
         printf("\nRecord %d not found!\n\n", rec);	
      printf("Which record do you want [0-2]? ");
      scanf("%d", &rec);
   }
fclose(people); }

Επισήμανση δυνατότητας απομόνωσης της δήλωσης της δομής person σε αρχείο header που γίνεται #include από τα αρχεία που την χρησιμοποιούν (πλεονεκτήματα).


Η ευτυχία δεν είναι μια κατάσταση στην οποία θα φθάσεις, αλλά ένας τρόπος για να ταξιδεύεις.
   -- Margaret Lee Runbeck.

Νίκος Παπασπύρου (nickie@softlab.ntua.gr).
Τελευταία αλλαγή: 30/03/2000 22:09 .