Το προφίλ μας στο Google Plus
2

Ανάπτυξη εφαρμογών σε C# για το .NET [μέρος 4ο]

Η γνωριμία μας με την C# έχει προχωρήσει αρκετά. Ή μήπως όχι; Η αλήθεια είναι ότι μια γνωριμία που έχει μόνο θεωρητική υπόσταση δεν είναι πραγματική γνωριμία. Σ’ αυτό το άρθρο, λοιπόν, θα ασχοληθούμε με τη C# στην πράξη, δημιουργώντας μερικά απλά προγράμματα για τη γραμμή εντολών.

Μετά την εκμάθηση των βασικών συστατικών της γλώσσας καθώς και της δημιουργίας βιβλιοθηκών, έχουμε πλέον φτάσει στη στιγμή που το 99,385% των αναγνωστών ανέμενε με ανυπομονησία από το πρώτο κιόλας άρθρο της σειράς. Μιλάμε για τη δημιουργία εκτελέσιμων προγραμμάτων, με τα οποία ο χρήστης θα μπορεί να αλληλεπιδρά — ή και όχι ;) Για αρχή θα μείνουμε στο περιβάλλον της κονσόλας, δεσμευόμενοι (και όχι απλά υποσχόμενοι) ότι σύντομα θα προχωρήσουμε στην ανάπτυξη παραθυρικών εφαρμογών.

Konsolen über alles
Η είσοδος και η έξοδος δεδομένων προς την κονσόλα πραγματοποιείται με τη βοήθεια της κλάσης Console, που ανήκει στο χώρο ονομάτων System. Η συγκεκριμένη κλάση είναι εφοδιασμένη με μια πληθώρα μεθόδων και ιδιοτήτων, οι οποίες εκτός από την απλή είσοδο και έξοδο συμβολοσειρών επιτρέπουν και τον πλήρη έλεγχο της κονσόλας. Αρκεί να σας πούμε ότι με τη βοήθεια τη συγκεκριμένης κλάσης μπορεί κανείς να δημιουργήσει ακόμα και TUI (Textual User Interface) (Σ.τ.Ε. Σχεδόν υποσυνείδητα, διάβασα “τουή”.)

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

Επί του παρόντος θα χρησιμοποιήσουμε τις μεθόδους Read και Write, όπως επίσης και τις διάφορες παραλλαγές τους. Το πρώτο μας παράδειγμα αποτελεί μια επέκταση του κλασικού “hello, world!”, κατά την οποία το πρόγραμμα απευθύνει έναν προσωπικό χαιρετισμό στο χρήστη αφού πρώτα ζητήσει να μάθει το όνομά του.

Πριν εξετάσουμε τον κώδικα του προγράμματος θα ρίξουμε μια γρήγορη ματιά στη διαδικασία δημιουργίας project για την κονσόλα, από το περιβάλλον του SharpDevelop. Προφανώς, το πρώτο βήμα είναι να επιλέξουμε το New Solution, από το μενού File. Στη συνέχεια, στο παράθυρο που εμφανίζεται επιλέγουμε το C# και αμέσως μετά το Windows Applications, ενώ από τη δεξιά περιοχή του παραθύρου κάνουμε κλικ στο Console Application. Κατόπιν, αρκεί να καθορίσουμε έναν κατάλογο για την αποθήκευση του project και, φυσικά, να του δώσουμε ένα όνομα. Μπορεί τα παραπάνω βήματα να μοιάζουν περίπλοκα για όσους δεν έχουν συνηθίσει να δουλεύουν με IDE, αλλά αν τα ακολουθήσετε μια-δυο φορές η διαδοχή των επιλογών που περιγράψαμε θ’ αρχίσει να σας φαίνεται λογική και απλή.

Όπως έχουμε ξαναπεί, κάθε φορά που δημιουργούμε ένα project εμφανίζονται και λίγες γραμμές κώδικα, οι οποίες φιλοδοξούν να αποτελέσουν το σκελετό του προγράμματός μας. Από τον κώδικα που εμφανίζεται αφαιρούμε όλες τις γραμμές που υπάρχουν μέσα στη μέθοδο Main της κλάσης Program, και στη θέση τους τοποθετούμε τα ακόλουθα:

using System;
namespace Name {
   class Program {
       public static void Main(string[] args) {
           string userName;
           Console.Title = "deltaHacker 042";
           Console.Write("What's your name? ");
           userName = Console.ReadLine();
           Console.WriteLine("Hello, " + userName + "!");
           Console.WriteLine();
           Console.Write("Press any key to continue... ");
           Console.ReadKey(true);
       }
   }
}

Στην πρώτη γραμμή παρατηρούμε την πρόταση using, η οποία επιτρέπει να χρησιμοποιούμε τα αντικείμενα ενός εξωτερικού namespace. Στο πρόγραμμά μας, επιλέγουμε τη χρήση αντικειμένων από το χώρο ονομάτων System. Πρόκειται για έναν χώρο που χρησιμοποιούμε σχεδόν πάντα και περιέχει όλα τα βασικά αντικείμενα του .NET. Στη δεύτερη γραμμή, με τη βοήθεια της πρότασης namespace, ορίζεται το όνομα του δικού μας χώρου ονομάτων. Σε αυτή τη γραμμή το SharpDevelop τοποθέτησε αυτόματα ένα όνομα και συγκεκριμένα το όνομα του Project μας. Όπως βλέπετε, επειδή δεν μπήκαμε στον κόπο να πληκτρολογήσουμε κάποιο όνομα, παρέμεινε η προεπιλογή (ένα σκέτο “Name”). Ακολούθως βλέπουμε τη δήλωση της κλάσης Program, που επίσης τοποθετήθηκε αυτόματα από το SharpDevelop. Όπως έχουμε ξαναπεί, στη C# βρίσκονται τα πάντα πίσω από αντικείμενα. Στη γραμμή 04 συναντάμε τη μέθοδο Main, με την οποία ξεκινάει κάθε πρόγραμμα. Ουσιαστικά, η συγκεκριμένη γραμμή αποτελεί τη λεγόμενη υπογραφή της μεθόδου, που δεν είναι τίποτα άλλο από το σύνολο των αναγνωριστικών (identifier) που την καθιστούν μοναδική: Το όνομά της, ο τύπος δεδομένων που επιστρέφει και η λίστα των παραμέτρων που δέχεται. Στο πρόγραμμά μας, η μέθοδος main διαθέτει μόνο μια παράμετρο με το όνομα args. Πρόκειται για έναν πίνακα που περιλαμβάνει όλες τις παραμέτρους που προέρχονται από το περιβάλλον εκτέλεσης του προγράμματος. Περιλαμβάνει, για παράδειγμα, τις παραμέτρους που έδωσε ο χρήστης στη γραμμή εντολών κατά την εκτέλεση του προγράμματος.

Στη γραμμή 05 ξεκινάει ο δικός μας κώδικας, με τη δήλωση μιας μεταβλητής τύπου string με το όνομα userΝame. Όπως καταλαβαίνετε, σε αυτήν θα αποθηκεύσουμε το όνομα του χρήστη, όπως θα το πάρουμε από την κονσόλα. Στη συνέχεια κάνουμε χρήση της ιδιότητας Title του αντικειμένου Console, ώστε να ορίσουμε τον τίτλο του παραθύρου στο οποίο θα τρέχει το πρόγραμμά μας. Εάν δεν ορίσουμε εμείς κάποιο όνομα, ο τίτλος θα σχηματίζεται αυτόματα από τη διαδρομή προς το πρόγραμμα. Η πρώτη μας (αληθινή) επαφή με την κονσόλα πραγματοποιείται στη γραμμή 07, με τη μέθοδο Write(). Με τη βοήθειά της εμφανίζουμε ένα μήνυμα, προτρέποντας το χρήστη να δώσει το όνομά του. Η λήψη της εισόδου από το χρήστη επιτυγχάνεται με τη μέθοδο ReadLine(), στη γραμμή 08. Η εν λόγω μέθοδος διακόπτει τη ροή του προγράμματος και περιμένει να πάρει από το χρήστη μια συμβολοσειρά. Όπως επισημάναμε και νωρίτερα, η επιστρεφόμενη συμβολοσειρά αποθηκεύεται στη μεταβλητή userΝame.

Στη συνέχεια εμφανίζουμε έναν προσωποποιημένο χαιρετισμό, χρησιμοποιώντας αυτή τη φορά τη μέθοδο WriteLine(). Η διαφορά της WriteLine από τη Write, έγκειται στο ότι εισάγει αυτόματα στο τέλος του εκάστοτε string ένα χαρακτήρα αλλαγής γραμμής. Όπως καταλαβαίνετε, θα μπορούσαμε κάλλιστα να χρησιμοποιήσουμε τη μέθοδο Write, εισάγοντας την αλλαγή γραμμής χειροκίνητα (με τον ειδικό χαρακτήρα “\n”). Κάτι ακόμα που αξίζει να σημειώσουμε είναι η χρήση του τελεστή “+” για τη συνένωση των τριών συμβολοσειρών. Στην πραγματικότητα δεν πρόκειται για έναν τελεστή, αλλά για μια συντόμευση προς τη μέθοδο String.Concat(x, y, …). Στη 10η γραμμή βλέπουμε πάλι τη μέθοδο WriteLine(), αλλά χωρίς κάποια παράμετρο. Αυτό είναι έγκυρο και έχει ως αποτέλεσμα την εμφάνιση μιας κενής γραμμής. Το ίδιο αποτέλεσμα θα μπορούσαμε να πετύχουμε και με μία μόνο εκτέλεση της WriteLine, εισάγοντας στο τέλος του string έναν χαρακτήρα αλλαγής γραμμής:

Console.WriteLine("Hello, " + userName + "!\n");

Προσπερνώντας τη γραμμή 11, όπου χρησιμοποιείται και πάλι η γνωστή πλέον Write, συναντάμε τη μέθοδο ReadKey(). Η συγκεκριμένη μέθοδος δεν διαβάζει μια ολόκληρη συμβολοσειρά, αλλά έναν μόνο χαρακτήρα. Συγκεκριμένα, διακόπτει τη ροή του προγράμματος και αναμένει το πάτημα ενός οποιουδήποτε πλήκτρου. Μόλις διαπιστωθεί κάτι τέτοιο, η μέθοδος ReadKey επιστρέφει μια δομή ConsoleKeyInfo και επιτρέπει τη “φυσιολογική” εξέλιξη του προγράμματος. Για τις ανάγκες του δικού μας προγράμματος, πάντως, η επιστρεφόμενη δομή ConsoleKeyInfo δεν υποβάλλεται σε κανέναν έλεγχο. Η μέθοδος ReadKey() χρησιμοποιείται μόνο και μόνο για την προσωρινή αναστολή εκτέλεσης του προγράμματος. Αυτή η τεχνική είναι ιδιαίτερα χρήσιμη, ειδικά όταν εκτελούμε το πρόγραμμά μας απευθείας από τον Windows Explorer. Σ’ αυτές τις περιπτώσεις, βλέπετε, μόλις τερματιστεί το πρόγραμμα το παράθυρο της κονσόλας κλείνει αμέσως και ο χρήστης δεν προλαβαίνει να δει τα μηνύματα που μπορεί να έχουν εμφανιστεί. Στην περίπτωση του δικού μας προγράμματος, χωρίς τη χρήση αυτής της ιδιότυπης υλοποίησης της pause, ο χρήστης δεν θα προλάβαινε να δει το χαιρετισμό που του απηύθυνε το πρόγραμμα.

Μπορείτε να κατεβάσετε ένα πακέτο με τον κώδικα από το http://bit.ly/dh042-dnet-name. Όπως θα διαπιστώσετε, ο κώδικας περιλαμβάνει και κάποιες μικρές προσθήκες, αισθητικού περιεχομένου.

Ας παίξουμε!
Επειδή το πρόγραμμα που εξετάσαμε μπορεί να σας φάνηκε βαρετό, το επόμενο παράδειγμα που θα δούμε αποτελεί ένα απλοϊκό παιχνίδι μαντικών ικανοτήτων: Ο υπολογιστής θα παράγει έναν τυχαίο αριθμό εντός κάποιον ορίων και ο χρήστης θα καλείται να τον μαντέψει. Το πρόγραμμα θα ενημερώνει το χρήστη για το αν πέτυχε τον αριθμό ή για το αν ο μυστικός αριθμός είναι μεγαλύτερος ή μικρότερος από αυτόν που έδωσε. Στο τέλος θα εμφανίζεται το σύνολο των προσπαθειών του χρήστη, έως ότου τα κατάφερε. Ας αφήσουμε όμως τις γενικές περιγραφές κι ας περάσουμε στον κώδικα.

using System;

namespace Guess{
   class Program{
       public static void Main(string[] args){
           Random rnd = new Random();
           int compNum = rnd.Next(0, 21);
           int userNum;
           string userInput;
           int efforts = 0;
           bool found = false;

           Console.WriteLine("Μάντεψε ποιον αριθμό [1-20] έβαλα στο μυαλό μου: ");
           while (!found) {
               Console.Write("To: ");
               userInput = Console.ReadLine();
               try {                    
                   userNum = int.Parse(userInput);
               } catch (Exception) {
                   Console.WriteLine("To \"" + userInput + "\" δεν είναι έγκυρος ακέραιος αριθμός.\nΔώσε έναν ακέραιο από το 1 έως το 20.\n");
                   continue;
               }
               
               if(userNum > compNum){
                   Console.WriteLine("Έχω σκεφτεί μικρότερο αριθμό από το "+ userNum.ToString() + "\nΔοκίμασε ξανά...\n");
               }else if(userNum < compNum){
                   Console.WriteLine("Έχω σκεφτεί μεγαλύτερο αριθμό από το "+ userNum.ToString() + "\nΔοκίμασε ξανά...\n");
               }else{
                   Console.WriteLine("Μπράβο! Ακριβώς αυτό τον αριθμό είχα σκεφτεί!\n");
                   found = true;
               }
               
               efforts++;                
           }
           
           Console.WriteLine("Μάντεψες τον αριθμό με " + efforts + " προσπάθειες.\n");
           
           Console.Write("Press any key to continue . . . ");
           Console.ReadKey(true);
       }
   }
}

Σ’ αυτό το πρόγραμμα χρησιμοποιούμε τις δομές ελέγχου και επανάληψης της C#, που γνωρίσαμε στο 2ο μέρος της σειράς, στο τεύχος 040. Ο κώδικας δεν παρουσιάζει κάποια ιδιαιτερότητα, εκτός ίσως από ορισμένα σημεία–κλειδιά που θα εξετάσουμε ευθύς αμέσως.

Στη γραμμή 06 βλέπουμε τη δημιουργία ενός αντικειμένου της κλάσης Random. Όπως φαντάζεστε, η συγκεκριμένη κλάση διευκολύνει την παραγωγή ψευδοτυχαίων αριθμών. Για αυτή τη δουλειά ακριβώς, προφέρεται η μέθοδος Next(min, max). Προφανώς, οι δύο παράμετροι καθορίζουν το διάστημα εντός του οποίου θα βρίσκεται ο τυχαίος αριθμός. Σημειώστε ότι το εν λόγω διάστημα είναι ημιανοικτό (το μέγεθος min περιλαμβάνεται στο διάστημα, ενώ το μέγεθος max όχι).

Μέσα στον κύριο βρόχο της μεθόδου Main, συναντάμε ένα μπλοκ “try – catch”. Μέσα στο συγκεκριμένο μπλοκ αξιοποιείται η μέθοδος Parse, που μετατρέπει αριθμητικές συμβολοσειρές σε αριθμητικές τιμές. Το μπλοκ “try – catch” χρησιμοποιείται επειδή η είσοδος που λαμβάνουμε από την κονσόλα ενδέχεται να μην είναι έγκυρη. Σε αυτή την περίπτωση θα προκληθεί κάποιο exception, το οποίο και θα πρέπει να χειριστούμε με τη δέουσα προσοχή. Στο παράδειγμά μας, αν προκύψει κάποιο σφάλμα κατά τη μετατροπή εμφανίζεται ένα μήνυμα που ενημερώνει σχετικά το χρήστη. Στη συνέχεια, με τη βοήθεια της εντολής continue η τρέχουσα εκτέλεση του βρόχου διακόπτεται και ξεκινά μια νέα. Λίγο πιο κάτω, στις γραμμές 24 και 26, χρησιμοποιούμε τη μέθοδο ToString(). Αυτή η μέθοδος έχει την αντίστροφη λειτουργία από την Parse που είδαμε προηγουμένως και μετατρέπει έναν αριθμό σε string. Στον κώδικά μας, ενδέχεται να παρατηρήσατε ότι τόσο η Parse όσο και η ToString καλούνται ως μέθοδοι του αντικειμένου Int. Όπως έχουμε πει επανειλημμένως, στη C# τα πάντα είναι αντικείμενα. Έτσι, οι ακέραιοι αριθμοί (Int), όπως και όλοι οι τύποι δεδομένων, αποτελούν κλάσεις. Πάντως η μέθοδος ToString ενσωματώνεται αυτόματα σε όλα τα αντικείμενα που δημιουργούμε στη C# και επιστρέφει μια συμβολοσειρά που αναπαριστά το εκάστοτε αντικείμενο. Η επικάλυψη και η υπερφόρτωση της συγκεκριμένης μεθόδου βρίσκονται στη διακριτική ευχέρεια του εκάστοτε προγραμματιστή. Εάν ο προγραμματιστής δεν επικαλύψει την ToString με κάποια δική του μέθοδο, επιστρέφεται το namespace στο οποίο ανήκει η κλάση του εκάστοτε αντικειμένου. Όπως και με το προηγούμενο παράδειγμα, έτσι και τώρα σας συνιστούμε να πειραματιστείτε με τον κώδικα και να μην αρκεστείτε σε μια απλή αντιγραφή και εκτέλεση. Μπορείτε να τον κατεβάσετε από το http://bit.ly/dh042-dnet-guess.

Το πρώτο μας πρόγραμμα για την κονσόλα, με φόντο τον κώδικά του.

Συμπληρώνοντας το παζλ
Μέχρι στιγμής έχουμε δει τη χρήση αντικειμένων από τις βασικές βιβλιοθήκες του συστήματος. Αν και αυτές οι βιβλιοθήκες καλύπτουν ένα πραγματικά τεράστιο φάσμα των προγραμματιστικών μας αναγκών, πολλές φορές θα χρειαστεί να αξιοποιήσουμε πρόσθετες βιβλιοθήκες. Σε αυτό το παράδειγμα, λοιπόν, θα μελετήσουμε τον τρόπο εισαγωγής και χρήσης μιας βιβλιοθήκης που διανέμεται σε μεταγλωττισμένη μορφή (αρχείο DLL). Σκοπός μας είναι η δημιουργία ενός προγράμματος για την κονσόλα, το οποίο θα εμφανίζει πληροφορίες για τη διευθυνσιοδότηση του τοπικού δικτύου. Για την υλοποίηση του προγράμματος θα στηριχτούμε στη βιβλιοθήκη SubnettingCalcs, που έχει αναπτύξει ο γράφων. Μπορείτε να κατεβάσετε τη βιβλιοθήκη και τη σχετική τεκμηρίωση από το http://www.multipetros.gr/?p=885.

Η προσθήκη τρίτων βιβλιοθηκών στο SharpDevelop γίνεται πανεύκολα, από το παράθυρο Add Reference.

Για την κατασκευή του προγράμματος ξεκινάμε δημιουργώντας ένα νέο project κονσόλας. Εμείς του δώσαμε το όνομα Netcalc. Στη συνέχεια, από το κεντρικό μενού του SharpDevelop επιλέγουμε το Project και πατάμε το Add Reference. Από εκεί μπορούμε να εισάγουμε αναφορές προς τις πρόσθετες βιβλιοθήκες που σκοπεύουμε να χρησιμοποιήσουμε. Στο παράθυρο που εμφανίζεται επιλέγουμε την καρτέλα “.NET Assembly Browser” και κάνουμε κλικ στο κουμπί Browse. Έτσι, εμφανίζεται ένα πλαίσιο διαλόγου από το οποίο πρέπει να πλοηγηθούμε ως το αρχείο DLL που θέλουμε να χρησιμοποιηθεί στο πρόγραμμά μας. Για μεγαλύτερη ευκολία κατεβάσαμε τη μεταγλωττισμένη βιβλιοθήκη και αποθηκεύσαμε το αρχείο DLL στον κατάλογο του project. Μόλις ολοκληρώσουμε την προσθήκη της βιβλιοθήκης (πατώντας στο κουμπί ΟΚ) μεταφερόμαστε αυτόματα στο κύριο περιβάλλον του SharpDevelop. Εφόσον έχουν πάει όλα καλά, στο panel ονόματι Project και συγκεκριμένα στο “δέντρο” References θα έχει προστεθεί η βιβλιοθήκη SubnettingCalcs. Μετά από αυτή την απλή διαδικασία, μπορούμε πλέον να προχωρήσουμε στη συγγραφή του κώδικα της εφαρμογής μας.

using System;
using Multipetros;

namespace Netcalc{
   class Program{
       public static void Main(string[] args){
           string ip;
           string netmask;
           SubnettingCalcs calc;
           
           Console.Write("IP address........: ");
           ip = Console.ReadLine();
           Console.Write("Netmask...........: ");
           netmask = Console.ReadLine();            
           calc = new SubnettingCalcs(ip, netmask);
           
           Console.WriteLine("Network capacity..: " + calc.NetCapacity.ToString());
           Console.WriteLine("Network prefix....: " + calc.Netprefix);                    
           Console.WriteLine("Broadcat address..: " + calc.Broadcast);
           Console.WriteLine("Hosts lowest IP...: " + calc.LowHostIp);
           Console.WriteLine("Hosts highest IP..: " + calc.HiHostIp);    
           
           Console.Write("Press any key to continue . . . ");
           Console.ReadKey(true);
       }
   }
}

Όπως μπορείτε να συμπεράνετε από τη δεύτερη γραμμή του κώδικα, ο χώρος ονομάτων που έχουμε δημιουργήσει για τη βιβλιοθήκη μας έχει το όνομα Multipetros. Μέσα σε αυτόν το χώρο βρίσκεται η κλάση SubnettingCalcs, ένα αντικείμενο της οποίας δημιουργούμε στη γραμμή 09. Εναλλακτικά, για να χρησιμοποιήσουμε την κλάση SubnettingCalcs χωρίς να “ενσωματώσουμε” στο πρόγραμμα ολόκληρο το χώρο ονομάτων, μπορούμε να γράψουμε το όνομα του namespace ακριβώς πριν από το όνομα της κλάσης. Έτσι, η γραμμή 09 θα γινόταν ως εξής:

Multipetros.SubnettingCalcs calc;

Στις επόμενες γραμμές, το πρόγραμμα ζητά από το χρήστη να δώσει τη διεύθυνση IP του υπολογιστή, όπως και τη “μάσκα δικτύου” (subnet mask). Αμέσως μετά, αξιοποιώντας τις μεθόδους που παρέχει το αντικείμενο calc της κλάσης SubnettingCalcs, το πρόγραμμα εμφανίζει το πλήθος των έγκυρων διευθύνσεων, τη “μικρότερη” και τη “μεγαλύτερη” διεύθυνση κ.ά. Σ’ αυτό το σημείο ενδέχεται να παραπονεθείτε για το γεγονός ότι το πρόγραμμά μας δεν πραγματοποιεί κανέναν έλεγχο εγκυρότητας στα εισερχόμενα δεδομένα. Περιττό να πούμε ότι έχετε απόλυτο δίκιο και ότι μια τέτοια παράλειψη θα ήταν επιεικώς απαράδεκτη για ένα μεγαλύτερο και πιο “κρίσιμο” πρόγραμμα. Ο κώδικας του συγκεκριμένου παραδείγματος βρίσκεται στο http://bit.ly/dh042-dnet-netcalc και θα αφήσουμε την περαιτέρω ανάπτυξή του στα χέρια σας. Μέχρι τον επόμενο μήνα, keep programing!

2 Responses to “Ανάπτυξη εφαρμογών σε C# για το .NET [μέρος 4ο]”

  1. ailatzis | 23/04/2015 at 15:08

    my 2 cents
    Ευχαριστώ τον Multipetros για το άρθρο:

    αναφέρομαι σχετικά με το τμήμα “Ας παίξουμε!” –

    -Υπάρχει η πιθανότητα ο αριθμός που πρέπει να βρούμε να είναι ο 0 (ο οποίος είναι εκτός ορίων)
    -και ένα δεύτερο, (πιο λειτουργικό) εφόσον στα τμήματα κώδικα υπάρχει η αρίθμηση των γραμμών να μην γίνεται αρίθμηση και μέσα στον κώδικα. (το πρώτο παράδειγμα κώδικα είναι ΟΚ με μονή αρίθμηση ενώ τα επόμενα έχουν διπλή αρίθμηση γραμμών)

    Υ.Γ -Επίσης δεν γίνεται έλεγχος, αν ο αριθμός που εισάγουμε είναι εντός ορίων. Παρά μόνο αν είναι ακέραιος.

    Ευχαριστώ

    • multiPetros | 24/04/2015 at 16:46

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

      Ο έλεγχος της εισόδου, τα σφάλματα και οι εξερέσεις είναι κομμάτι της γλώσσας που θα μας απασχολήσει ενδελεχώς σε κάποιο από τα επόμενα άρθρα της σειράς μας. Γι’ αυτό, stay tuned! ;)

      Αναφορικά με την αρίθμηση του κώδικα, είναι καθαρά τυπογραφικό θέμα, το οποίο θα διορθώσουμε άμεσα.

      Keep coding! :)

Leave a Reply

You must be logged in to post a comment.

Σύνδεση

Αρχείο δημοσιεύσεων