[MUSIC CHƠI] DOUG LLOYD: Được rồi, vậy chúng ta hãy nói về các đối số dòng lệnh. Vì vậy, cho đến nay trong khóa học khá nhiều tất cả các chương trình của bạn đã có thể bắt đầu như this-- int void main. Chúng tôi đã thu thập người dùng nhập vào, nếu chúng ta cần nó trong các chương trình của chúng tôi, chẳng hạn như Chương trình Mario, ví dụ, bởi trong chương trình nhắc nhở. Chúng tôi không cần thiết phải sửa đổi việc kê khai của chính, bởi vì thay vì bên trong của chúng tôi chủ yếu chỉ nói, bạn có thể gọi nó là để có được int. Làm thế nào để bạn muốn lớn các kim tự tháp được? Hoặc bạn có thể gọi nó là để có được float-- bao nhiêu thay đổi tôi nên đầu ra cho người sử dụng? Có một cách khác mặc dù, và nếu chúng ta muốn người dùng của chúng tôi để có thể cung cấp dữ liệu vào chương trình của chúng tôi trong thời gian chạy thay vì trong khi các chương trình đang chạy, khác biệt tế nhị nhưng đôi khi một trong rất hữu ích, chúng ta cần một hình thức mới của tuyên bố chính. Chúng tôi không thể sử dụng int void main nếu chúng ta muốn thu thập dữ liệu khác tại các dòng lệnh khi người dùng chạy các chương trình, do đó đối số dòng lệnh. Để thu thập được những dòng lệnh lập luận từ người sử dụng, thay đổi khai báo của bạn chính để trông giống như this-- int chính, dấu ngoặc mở, int argc, dấu phẩy, chuỗi argv, dấu ngoặc vuông, và sau đó mở ngoặc móc. Vì vậy, có nghĩa là gì chưa? Vâng, chúng tôi đang đi qua trong hai tham số, hay tranh luận, hoặc đầu vào chính. Một, một số nguyên được gọi là argc, và khác là gì? Đây là một mảng các chuỗi, phải không? Chúng tôi thấy rằng ký hiệu khung vuông. Đây là một mảng của chuỗi. Nó không phải là một chuỗi cá nhân, nó là một mảng của chuỗi. Và hai đối số, argc và argv, cho phép bạn biết những gì dữ liệu người dùng đã được cung cấp tại các dòng lệnh và bao nhiêu những điều họ cung cấp tại các dòng lệnh. Điều khá hữu ích để làm việc với. Argc là viết tắt của số đối số, và bạn nên biết, bằng cách này, mà bạn có thể gọi argc bất cứ điều gì bạn muốn nó. Bạn có thể gọi argv bất cứ điều gì bạn muốn. Đây là những tên chỉ thông thường mà chúng tôi sử dụng cho them-- số lập luận, và như chúng ta sẽ thấy trong một giây, vector tham số, argv. Nhưng bạn không cần phải gọi cho họ argc và argv nếu bạn không muốn, nhưng thông thường, đó là những gì chúng tôi làm. Vì vậy, dù sao, argc, số lượng đối số. Đây là một biến số nguyên và kiểu như vậy, như bạn có thể mong đợi, nếu chúng ta có hai điều rằng chúng ta sẽ được tìm kiếm khám phá những gì được đánh máy và bao nhiêu thứ mà các người dùng đánh máy, argc là sẽ cho chúng tôi biết bao nhiêu nhét người dùng gõ. Vì vậy, nó sẽ cho bạn một số đối số dòng lệnh sử dụng đánh máy khi chương trình được thực thi. Vì vậy, nếu chương trình của bạn chạy dot giảm tham lam, và bên trong của tham lam của bạn chương trình chức năng chính của bạn có khai báo int int argc chính, chuỗi argv dấu ngoặc vuông, sau đó argc trong trường hợp đó là một. Bây giờ chúng tôi nhận thấy không đếm có bao nhiêu thứ người sử dụng gõ vào sau tên chương trình. Tên chương trình chính nó đếm như là một đối số dòng lệnh. Vì vậy, rải rác giảm tham lam, trong trường hợp đó, argc là một. Nếu người sử dụng gõ dấu gạch chéo tham lam 1024 CS50 tại dòng lệnh, argc trong trường hợp đó sẽ là ba. Và chúng ta biết điều này vì đường rằng sự phân chia giữa các dây được phát hiện là liệu có một không gian, hoặc một tab, hoặc một cái gì đó như thế giữa chúng. Vì vậy, bất kỳ khoảng không gian màu trắng, cái gọi là, giữa các giá trị gõ dòng lệnh chỉ ra có bao nhiêu. Vì vậy, rải rác giảm không gian tham lam 1024 không gian CS50, argc, trong trường hợp đó, là ba. Argv là các vector tham số. Vector, bằng cách này, chỉ là một từ khác cho một mảng, và điều này là một mảng mà các cửa hàng chuỗi. Một chuỗi mỗi yếu tố, mà là các dây mà người dùng thực sự gõ vào dòng lệnh khi chương trình được thực thi. Bây giờ, như là trường hợp với mảng bất kỳ, nếu bạn nhớ lại từ cuộc thảo luận của chúng ta về mảng, phần tử đầu tiên của argv là luôn luôn có thể được tìm thấy tại argv khung vuông zero. Đó là chỉ số đầu tiên của mảng argv. Vì vậy mà will-- và trong thực tế, điều đó sẽ luôn luôn là tên của chương trình, sẽ luôn luôn được đặt tại argv khung vuông zero. Yếu tố cuối cùng của argv là luôn luôn tìm thấy tại argv dấu ngoặc vuông argc trừ đi một. Bạn có thấy lý do tại sao? Ghi bao nhiêu yếu tố tồn tại trong mảng này. Vâng, chúng tôi biết that-- nó số argc của các yếu tố. Nếu người dùng gõ ba thứ cùng các dòng lệnh, argc là ba. Nhưng bởi vì trong c, khi chúng tôi đang làm việc với mảng, mỗi phần tử của mảng, hay đúng hơn là chỉ số của mảng, bắt đầu từ số không. Nếu chúng tôi có ba yếu tố trong của chúng tôi mảng, chúng tôi có một phần tử ở argv zero, một phần tử ở argv một, và một phần tử ở argv hai. Không có yếu tố tại argv ba, và một mảng có kích thước ba. Vì vậy, đó là lý do tại sao cuối cùng yếu tố của argv có thể luôn luôn được tìm thấy tại argv vuông ngoặc argc trừ đi một. Vì vậy, chúng ta thừa nhận thực người dùng chương trình tham lam như follows-- nếu họ gõ vào dòng lệnh dot giảm tham lam không gian 1024 không gian CS50, và vì lý do gì chúng tôi đã đã chuẩn bị chương trình tham lam của chúng tôi để biết và làm việc với các đối số dòng lệnh. Chúng tôi đã làm trước đây không khi chúng tôi làm việc trên đó cho các vấn đề tham lam, nhưng chúng ta hãy nói bây giờ chúng ta đã sửa đổi nó để chúng ta làm quá trình các đối số dòng lệnh trong một số cách. Trong trường hợp này, argv zero là dấu chấm dấu gạch chéo tham lam. Argv một là gì? Vâng, đó là năm 1024, phải không? Đó là năm 1024, nhưng đây là một distinction-- thực sự quan trọng bạn có nhớ các kiểu dữ liệu của argv? Nó lưu trữ các chuỗi, phải không? Nhưng có vẻ như năm 1024 là một số nguyên. Đây là một thực sự quan trọng phân biệt, và thực sự là sẽ trở thành một cái gì đó mà bạn có thể gặp phải trong vấn đề sau này. Tất cả mọi thứ trong argv là được lưu trữ như là một chuỗi. Vì vậy, nội dung của một argv là một chuỗi, bằng không, hai, bốn, gồm bốn ký tự. Đó là nếu người dùng gõ một, không, hai, bốn như các chữ cái hoặc ký tự. Nó không phải là số nguyên 1024, và do đó bạn có thể không trực tiếp làm việc với nó bằng cách nói int 1000, hoặc thay vì int x bằng argv một trừ đi 24. Bằng trực giác, bạn có thể nghĩ rằng như, OK, cũng đó là 1024 trừ đi 24, nên x bằng 1.000. Nhưng trên thực tế, đó không phải là trường hợp, vì argv một là một chuỗi. Chuỗi 1024. Bây giờ có một chức năng mà có thể được được sử dụng để chuyển đổi các chuỗi số nguyên. Tôi sẽ không làm hỏng nó cho bạn bây giờ, nhưng tôi chắc chắn Zamyla sẽ được hạnh phúc để cho bạn biết về nó trong các hương cho một vấn đề trong tương lai. Nhưng bạn cũng có thể tìm thấy vấn đề like-- cớ tôi, chức năng mà có làm điều này trong tài liệu tham khảo 50, nếu bạn đi đến hướng dẫn tham khảo bạn có thể tìm thấy một chức năng mà sẽ thực hiện chuyển đổi này cho bạn. Nhưng một lần nữa, trong hướng cho một vấn đề trong tương lai, Zamyla sẽ được hạnh phúc để cho bạn biết những gì chức năng nó là sẽ chuyển đổi chuỗi 1024 đến các số nguyên 1024. Được rồi, để di chuyển trên. Chúng tôi đã được bảo hiểm không argv của chúng tôi, chúng ta đã thảo argv một. Có gì trong argv hai? CS50. Đó có thể là một khá tự giải thích. Có gì trong argv ba? Vâng một lần nữa, chúng tôi thực sự không biết, phải không? Chúng tôi có một mảng có kích thước ba, đó là bao nhiêu yếu tố người sử dụng gõ vào dòng lệnh, vì vậy nếu chúng ta đi đến argv ba, chúng tôi hiện overstepping giới hạn của mảng của chúng tôi. Trình biên dịch sẽ cho phép chúng ta làm điều này, không có vấn đề trực quan với nó, nhưng về mặt thực tế những gì đang diễn ra xảy ra, chúng tôi thực sự không biết. Nó phụ thuộc vào những gì là nằm trong bộ nhớ nơi argv ba sẽ được dự kiến ​​sẽ được. Và vì vậy chúng tôi có thể kết thúc lấy đi số tiền phải đóng góp miễn phí. Nhiều khả năng hơn không, đặc biệt là khi bạn đang làm việc với argv như trái ngược để các mảng khác đó là trong chương trình của chúng tôi, có lẽ chúng ta sẽ phải chịu đựng một lỗi phân khúc. Vì vậy, một lần nữa, được bảo đảm không vượt qua giới hạn của mảng của bạn, đặc biệt là argv, cho mức độ cao của tầm quan trọng trong các chương trình của bạn. Tôi Doug Lloyd. Đây là CS50.