[Powered by Google Translate] [Ορίσματα της γραμμής εντολών]
[Christopher Βαρθολομαίος - Πανεπιστήμιο του Χάρβαρντ]
[Αυτό είναι CS50 - CS50.TV]
Ένα χρήσιμο χαρακτηριστικό για ένα πρόγραμμα είναι να δεχτεί είσοδο του χρήστη.
Μέχρι στιγμής, έχουμε διερευνήσει κάποιες λειτουργίες μέσα στη βιβλιοθήκη CS50
να δεχτεί είσοδο του χρήστη, όπως "να πάρει σειρά,"
η οποία ζητά από το χρήστη, ενώ η εφαρμογή εκτελείται, για ένα string.
>> Ωστόσο, υπάρχουν περιπτώσεις όπου θέλετε να τροφοδοτήσει το πρόγραμμά σας
πριν από την πραγματική λειτουργία.
Με αυτό τον τρόπο, δεν χρειάζεται να ζητήσει πρόσθετες πληροφορίες από το χρήστη
εκτελώντας μια απλή εργασία.
Πάρτε, για παράδειγμα, η εντολή mv ή κίνηση στο UNIX.
Αυτή η εντολή επιτρέπει στο χρήστη να μετακινήσει ένα αρχείο από μια τοποθεσία σε μια άλλη.
Σύμφωνα με τις σελίδες manual, mv δέχεται δύο ορίσματα γραμμής εντολών:
Το αρχείο που είναι να μετακινηθεί η θέση και το αρχείο που μεταφέρθηκε στο.
Έτσι, αυτό το παράδειγμα έχει μια εντολή με δύο επιχειρήματα.
Επομένως, πώς θα πείτε C πρόγραμμά μας να αξιοποιήσει αυτά τα ορίσματα της γραμμής εντολών;
>> Λοιπόν, αποδεικνύεται ότι το κύριο, το οποίο χρησιμοποιούμε σε όλα τα προγράμματα C, έχει ένα μυστικό.
Κύρια δέχεται δύο παραμέτρους: argc και argv.
Ας πάει πάνω από αυτούς τους όρους.
>> Η πρώτη παράμετρος, argc, που σημαίνει καταμέτρηση επιχείρημα,
έχει έναν τύπο δεδομένων του ακεραίου.
Η παράμετρος argc περιέχει τον αριθμό των επιχειρημάτων, συμπεριλαμβανομένου του εντολή.
Στην εντολή κίνηση μας, αν και έχουμε μόνο δύο επιχειρήματα που εμφανίζεται,
argc τιμή θα είναι 3.
Η δεύτερη παράμετρος, argv, που σημαίνει διάνυσμα επιχείρημα,
είναι μια σειρά από δείκτες που char δείχνουν χορδές.
>> Αυτό σημαίνει ότι κάθε στοιχείο argv, ξεκινώντας από το μηδέν,
περιέχει την εντολή και τα επιχειρήματα.
Για παράδειγμα, argv [0], η οποία θα αναφερθώ ως argv μηδέν,
θα περιέχει πάντα την εντολή που τρέχει -
στην περίπτωση αυτή, mv.
argv [1] θα περιέχει το πρώτο επιχείρημα, file.txt,
και argv [2] θα περιέχει το δεύτερο επιχείρημα, ~ / CS50 /.
Το τελευταίο επιχείρημα του argv θα είναι πάντα null.
Ας εφαρμόσουν αυτές τις ορίσματα της γραμμής εντολών.
Σε προηγούμενες ασκήσεις, που τοποθετείται κενό, δηλαδή τίποτα, ως κύρια παράμετρος του.
Ωστόσο, για να μπορέσουμε να χρησιμοποιήσει ορίσματα της γραμμής εντολών,
πρέπει να αφαιρέσετε μέσα κενό και ο τόπος της κύριας int argc, char * argv [].
Τώρα, για να αποκτήσετε πρόσβαση σε ολόκληρο το στοιχείο από argv, τα οποία είναι τα επιχειρήματά σας,
μπορείτε απλά να επαναλάβει, ή βρόχο, μέσω του πίνακα, όπως αυτό.
Έτσι, μέσα από το σώμα του κυρίως, θα πάμε για να πάει μπροστά και να πληκτρολογήσετε ένα για βρόχο:
for (int i = 0? i <argc? i + +).
>> Δεν χρειαζόμαστε μια σγουρά στήριγμα εδώ επειδή είμαστε εκτελεί μόνο μία γραμμή κώδικα
μέσα στο σώμα αυτού του βρόχου.
Θα πάμε μπροστά και να χτυπήσει μια φορά καρτέλα,
στη συνέχεια, πληκτρολογήστε printf ("argv [% d], για να αντιπροσωπεύουν μια ακέραια τιμή,
είναι% s, για string, τότε ο χαρακτήρας νέας γραμμής.
Τότε παρέχουμε i printf για την τρέχουσα επανάληψη του βρόχου
και argv [i] για την αναπαράσταση συμβολοσειράς της τρέχουσας όρισμα της γραμμής εντολών.
Όταν έχουμε να τρέξει με δύο επιχειρήματα, θα δούμε τα επιχειρήματα που εμφανίζεται στο τερματικό.
Νωρίτερα είπαμε ότι η argv πραγματοποιήθηκε μια σειρά από δείκτες char.
>> Έτσι, αν αυτή είναι η περίπτωση, πώς μπορούμε τότε πρόσβαση μεμονωμένων χαρακτήρων σε κάθε επιχείρημα;
Για παράδειγμα, τι θα γίνει αν ήθελα να ψάξουν για ένα συγκεκριμένο χαρακτήρα στο πρώτο επιχείρημα;
Λοιπόν, η απάντηση είναι ότι πρέπει να εφαρμόσουμε μια ένθετη βρόχο
που στη συνέχεια θα επαναλάβει μέσω καθενός από τα στοιχεία της συμβολοσειράς επιχείρημα.
Αυτό είναι το πώς θα το κάνουμε.
>> Κατ 'αρχάς, θα πάμε για να δημιουργήσετε ένα αντίγραφο του example2.c.
Στη συνέχεια, στο εσωτερικό του πρώτου βρόχου for,
θα πάμε να προσθέσετε ένα επιπλέον για βρόχο.
Έτσι, για (int j = 0, n = strlen (argv [i]),
η οποία δίνει στη συνέχεια μας το μήκος του τρέχοντος επιχειρήματος,
? J <n? J + +)
Εμείς πάμε για να εκτυπώσετε τη θέση του κάθε χαρακτήρα
εντός της τρέχουσας επιχείρημα με τη χρήση printf.
Έτσι, printf ("argv [% d], να εκπροσωπεί το δείκτη της τρέχουσας επιχείρημα,
τότε [% d] για άλλη μια φορά, να αντιπροσωπεύουν την τρέχουσα χαρακτήρας της τρέχουσας επιχείρημα,
είναι: γ%, για το τρέχον χαρακτήρα στο επιχείρημα.
Τέλος, παρέχουμε printf με το δείκτη του εξωτερικού βρόχου, i,
τότε ο δείκτης του εσωτερικού βρόχου.
>> Και το τελευταίο επιχείρημα μας να printf είναι ο πραγματικός χαρακτήρας από το επιχείρημα που
στη γραμμή εντολών.
Τώρα, επειδή χρησιμοποίησα τη συνάρτηση strlen σειρά να λάβει το μήκος μιας συμβολοσειράς,
Θα πρέπει επίσης να προσθέσετε την string.h βιβλιοθήκη στην κορυφή περιλαμβάνει μας.
Έτσι, για να το κάνουμε αυτό, θα πάμε επάνω, και ακριβώς κάτω από stdio.h, θα πάμε να κάνουμε
# Include .
>> Έτσι, ας μεταγλώττιση και εκτέλεση και παρέχει ένα πραγματικό επιχείρημα.
>> Και, όπως μπορούμε να δούμε, τώρα έχουμε την ακριβή τοποθεσία του κάθε char στο επιχείρημα.
Έτσι, αυτό είναι όλο. Είμαι Christopher Βαρθολομαίος? Αυτό είναι CS50.
[CS50.TV]