[Powered by Google Translate] [Đối số dòng lệnh]
[Christopher Bartholomew - Đại học Harvard]
[Đây là CS50 - CS50.TV]
Một tính năng hữu ích cho một chương trình là phải chấp nhận đầu vào người sử dụng.
Như vậy đến nay, chúng tôi đã khám phá một số chức năng trong thư viện CS50
chấp nhận đầu vào của người dùng, chẳng hạn như "nhận được chuỗi"
nhắc nhở người sử dụng, trong khi các ứng dụng đang chạy, cho một chuỗi.
>> Tuy nhiên, có những trường hợp bạn muốn cung cấp đầu vào chương trình của bạn
trước khi nó thực sự là chạy.
Bằng cách này, bạn không cần phải hỏi thêm thông tin từ người dùng của bạn
trong khi thực hiện một nhiệm vụ đơn giản.
Lấy ví dụ, mv lệnh di chuyển trong UNIX.
Lệnh này cho phép người sử dụng để di chuyển một tập tin từ một địa điểm khác.
Theo các trang hướng dẫn sử dụng, mv chấp nhận hai đối số dòng lệnh:
các tập tin đang được di chuyển và vị trí tập tin đang được chuyển đến.
Vì vậy, ví dụ này có một lệnh với hai đối số.
Vì vậy, làm thế nào để chúng ta nói với C chương trình của chúng tôi sử dụng các đối số dòng lệnh?
>> Vâng, nó chỉ ra rằng chính, chúng tôi sử dụng trong tất cả các chương trình C, có một bí mật.
Main chấp nhận hai tham số: argc và argv.
Hãy đi qua những điều khoản này.
>> Tham số đầu tiên, argc, đó là viết tắt cho số đối số,
có một kiểu dữ liệu của các số nguyên.
Tham số argc chứa số lượng các đối số, bao gồm cả lệnh.
Trong lệnh di chuyển của chúng tôi, mặc dù chúng tôi chỉ có hai đối số hiển thị,
giá trị của argc sẽ là 3.
Tham số thứ hai, argv, mà là viết tắt của đối số vector,
là một mảng của các con trỏ char trỏ đến chuỗi.
>> Điều này có nghĩa rằng mỗi yếu tố trong argv, bắt đầu từ số không,
chứa các lệnh và tranh luận.
Ví dụ, argv [0], tôi sẽ tham khảo là argv không,
sẽ luôn luôn chứa lệnh đang được chạy -
trong trường hợp này, mv.
argv [1] sẽ chứa tham số đầu tiên, file.txt,
và argv [2] sẽ chứa tham số thứ hai, ~ / CS50 /.
Đối số cuối cùng của argv sẽ luôn luôn là null.
Vì vậy, chúng ta hãy thực hiện các đối số dòng lệnh.
Trong bài tập trước, chúng tôi đặt có hiệu lực, có nghĩa là không có gì, như một tham số chính của.
Tuy nhiên, để cho chúng ta sử dụng các đối số dòng lệnh,
chúng ta cần phải loại bỏ void và địa điểm bên trong của chính int argc, char * argv [].
Bây giờ, để truy cập toàn bộ phần tử từ argv, đó là lập luận của bạn,
bạn chỉ có thể lặp đi lặp lại, hoặc vòng lặp, thông qua các mảng như thế này.
Vì vậy, bên trong cơ thể chính, chúng tôi sẽ đi trước và gõ một vòng lặp for:
for (int i = 0; i <argc; i + +).
>> Chúng tôi không cần một cú đúp xoăn ở đây bởi vì chúng ta chỉ thực hiện một dòng mã
trong cơ thể của vòng lặp này.
Chúng tôi sẽ đi trước và nhấn tab một lần,
sau đó gõ printf ("argv [% d], để đại diện cho một giá trị số nguyên,
% s, chuỗi, sau đó các ký tự dòng mới.
Sau đó, chúng tôi cung cấp printf i lặp hiện tại của vòng lặp
và argv [i] cho chuỗi đại diện của các đối số dòng lệnh hiện tại.
Khi chúng tôi chạy nó với hai đối số, chúng ta sẽ thấy các đối số được hiển thị trong các thiết bị đầu cuối.
Trước đó chúng tôi đã nói rằng argv đã tổ chức một mảng của các con trỏ char.
>> Vì vậy, nếu đây là trường hợp, làm thế nào để chúng ta truy cập vào các đặc điểm cá nhân trong mỗi đối số?
Ví dụ, những gì nếu tôi muốn tìm kiếm một nhân vật cụ thể trong tham số đầu tiên?
Vâng, câu trả lời là chúng ta cần phải áp dụng một vòng lặp lồng nhau
mà sau đó sẽ lặp lại qua mỗi phần tử trong chuỗi đối số.
Đây là cách bạn làm điều đó.
>> Đầu tiên, chúng ta sẽ tạo một bản sao của example2.c.
Sau đó, bên trong những người đầu tiên cho vòng lặp,
chúng ta sẽ thêm một bổ sung cho vòng lặp.
Vì vậy, đối với (int j = 0, n = strlen (argv [i]),
sau đó cho chúng ta chiều dài của đối số hiện tại,
; J <n; j + +)
Chúng tôi sẽ in ra vị trí của mỗi ký tự
bên trong của đối số hiện tại bằng cách sử dụng printf.
Vì vậy, printf ("argv [% d], để đại diện cho các chỉ số của các đối số hiện tại,
sau đó [% d] một lần nữa, để đại diện cho nhân vật hiện tại của các đối số hiện tại,
là:% c, cho các nhân vật hiện tại trong đối số.
Cuối cùng, chúng tôi cung cấp printf với các chỉ số của các vòng ngoài, i,
sau đó chỉ số của vòng lặp bên trong.
>> Và đối số cuối cùng của chúng tôi để printf là nhân vật thực tế từ các đối số được cung cấp
tại dòng lệnh.
Bây giờ, bởi vì tôi đã sử dụng chức năng chuỗi strlen để có được chiều dài của một chuỗi,
Tôi cũng phải thêm các thư viện string.h đầu bao gồm của chúng tôi.
Vì vậy, để làm điều đó, chúng ta sẽ đi lên, và dưới stdio.h, chúng tôi đang đi làm
# Bao gồm .
>> Vì vậy, hãy biên dịch và chạy và cung cấp cho nó một đối số thực tế.
>> Và, như chúng ta có thể thấy, hiện nay chúng tôi có vị trí chính xác của từng char cá nhân trong đối số.
Vì vậy, đó là nó. Tôi là Christopher Bartholomew, đây là CS50.
[CS50.TV]