[Powered by Google Translate] [♪ ù ♪] Vì vậy, để giới thiệu với bạn những gì tôi đã lên trên màn hình; đó là một trong những công cụ mà chúng ta phát triển trong mùa hè; nó được gọi là CS50 Spaces, và đó là hợp tác ứng dụng mã hóa của chúng tôi mà chúng ta sẽ sử dụng trong các phần. Đó là khá mát mẻ. Có bất kỳ của bạn nhìn thấy CS50 chạy chưa? Hãy cho tôi kéo mà lên trong tab khác. Run.cs50.net Vì vậy, nếu bạn đi đến run.cs50.net, bạn có thể thấy điều này là một trong cách thức trình duyệt của bạn để thực sự mã viết mã C, và sau đó chạy nó, do đó, nó biên dịch nó, chạy nó, sau đó trả về đầu ra cho bạn vì vậy đây là loại một cách mát mẻ để thử nghiệm với một số mã mà David đi qua trong các bài giảng và chúng tôi cung cấp cho bạn trên bộ vấn đề mà không thực sự phải cháy lên các thiết bị. Vì vậy, những gì không gian nào đó là khác nhau từ đó nếu tôi chuyển về tab này, Spaces là CS50 chạy, giống như bạn nhìn thấy ngay ở đây, nhưng nếu chúng ta di chuyển trên và nhìn vào phía bên kia của cửa sổ, bạn nhìn thấy bên phải tôi là người duy nhất trong không gian này, nhưng những gì tôi sẽ làm là hỏi các bạn tham gia không gian này với tôi và tất cả chúng ta sẽ nhận được mã trong cùng một cửa sổ nhỏ, chia sẻ mã với nhau, và nói về sự khác biệt giữa các mã của chúng tôi. Vì vậy, nó là loại một điều mát mẻ - do đó, để tham gia, nếu bạn có thể truy cập vào liên kết này ngay tại đây ở đầu trang mà tôi đã nêu bật, bạn chỉ có thể gõ ở apps.cs50.net/spaces/vqcspSnO. Được rồi, do đó, để bắt đầu, Tôi sẽ cung cấp cho bạn một chút ít của một tour du lịch này. Chúng ta sẽ làm một số mã hóa nhỏ ngớ ngẩn với nó lần đầu tiên, chỉ cần để tất cả mọi người kinda được một cảm giác về những gì nó muốn, nhưng những gì tôi đã thực hiện - hoặc những gì tôi đang làm ngay ở đây là - Tôi sẽ lấy code mà tôi đã viết ở đây, như bạn thấy ngay bây giờ trống rỗng, nó không làm bất cứ điều gì. Nó chỉ là tấm mã nồi hơi, chúng tôi sẽ gọi nó. Với một chút để làm bình luận. Tôi sẽ lưu nó bằng cách nhấn nút Save. Và điều đó không được làm nổi bật nó lên đây một thời gian ngắn - rằng sửa đổi save hộp màu xanh lá cây, và bây giờ, nếu bạn tìm kiếm cho tôi trong không gian, bạn nhấp vào tên của tôi, bạn có thể thấy rằng tôi đã có sửa đổi ngay tại đây, và nếu bạn bấm vào sửa đổi đó, nó sẽ tải mã vào không gian của bạn, quá. Vì vậy, tất cả mọi người tải mã vào không gian của họ? Được rồi, nếu bạn chưa có, đi trước và làm điều đó, và sau đó những gì tôi muốn các bạn làm trong này ít việc phải làm phần là viết một chút bằng cách sử dụng printf về bản thân, ví dụ như vậy, tôi sẽ viết printf ("Tên tôi là Nate"); và sau đó tôi muốn viết "Tôi tốt nghiệp trong năm 2009 Stanford " và tôi sẽ thích được nghe về năm nào bạn đang ở trong trường học, cho dù bạn đang ở trường cao đẳng hoặc trường kinh doanh hoặc một trường đại học Harvard, cái bạn đang học nếu nó được nêu ra; nếu nó không được biết đến, đó là hoàn toàn mát mẻ. Tôi không quyết định cho đến khi tôi vào cuối năm thứ hai của tôi. và sau đó tôi cũng rất thích biết điên bất cứ điều gì bạn muốn cho tôi biết một cái gì đó về các lớp học hoặc bất cứ điều gì khác. Khi bạn làm xong viết rằng với chút printf, bạn sẽ tiết kiệm sửa đổi hoặc thay đầu tiên, hãy chắc chắn rằng bạn có thể chạy nó và nó in ra chính xác những gì bạn muốn nó để in ra, và sau đó nếu bạn đi trước và lưu lại đó sửa đổi bằng cách sử dụng sửa đổi nút Lưu, anh chàng này lần đầu tiên ở đây, và chúng tôi kinda sẽ đi qua và làm được một chút như vậy. Vì vậy, bạn chỉ cần phải nhấn vào nút Play, đó là ở trên cùng bên trái, để nút Play trên cùng bên trái sẽ gửi mã của bạn đến máy chủ của chúng tôi, nơi nó được biên dịch và sau đó chạy. Vì vậy, kinda điên về việc này là những gì được mã này thực sự không chạy trên máy tính của bạn; nó thực sự đang được gửi qua mạng Internet. Việc thế nào, Charlotte? >> I - okay. Tôi - tôi nghĩ rằng tôi đã khó khăn tiết kiệm nó trên máy chủ như vậy mà nó có thể - Tôi có thể chạy chương trình. Và sau đó khi tôi cố gắng chạy nó, nó nói rằng có một lỗi. Khai báo là virus, đó là không ở trong đó nữa. Ồ, chúng ta hãy xem, bạn có thể nhấn Save lần nữa? Tôi nhìn thấy nó trên màn hình. >> Phải, okay, vì vậy đó là những gì tôi có. Và tôi không biết tại sao nó không cho phép tôi chạy nó. Ồ, không sao, xin lỗi. Bạn có thể giải thích lý do tại sao những gì đã sai những gì không làm việc với nó? >> Yeah, bởi vì tôi không thấy rằng có một dòng cuối cùng, nơi có một biến mà tôi đã không được khai báo, mà tôi đã không có ý định cho nó được ở đó. Yeah, hoàn hảo! >> Bây giờ nếu tôi lưu nó, tôi nghĩ rằng nó sẽ làm việc. Bây giờ mà bạn đã lưu nó, nó hoạt động; awesome. Vì vậy, yeah, khi chúng tôi đi qua - vì vậy những gì đang diễn ra, Tôi chỉ cần đi lặp lại điều này cho máy ảnh. Những gì đã xảy ra là biến này s còn lại sau - Tôi giả sử bạn đã xóa một số công cụ khác nơi bạn kê khai như, và do đó, điều này đã được ném vật tắt và không cho phép bạn chạy nó. Vì vậy, điều này là chính xác những gì chúng tôi muốn làm trong phần là có người cố gắng viết các phần khác nhau của mã, biên dịch nó, xem những gì làm việc, xem những gì không, và sau đó kinda nói về những điều này, bởi vì đây là những điểm tripping Tôi vẫn gặp phải, Tôi vẫn còn - Tôi làm rất nhiều thứ ngớ ngẩn của tất cả các thời gian, và tôi không biết tại sao nó không hoạt động, do đó, chúng ta hãy kéo lên sửa đổi của Charlotte 3, và chúng tôi sẽ chạy nó. Vì vậy, khi tôi chạy, bây giờ mà tôi đã có mã của mình ở đây, Tôi có thể phóng to, nhấn nút Run, cập nhật, xây dựng nó, chạy nó, nói nó chạy thành công, và nếu tôi di chuyển xuống, Charlotte là một học sinh ở Adams House, tâm lý học, trung học trong kinh tế; awesome. Tuyệt vời để gặp các bạn! Awesome. Được rồi, di chuyển trên, chúng ta hãy đi đến Daniel, đi lên phiên bản 3, biên dịch, chạy; tại sao bạn không cho chúng tôi biết một chút về bản thân mình, Daniel? >> Hãy gọi cho tôi Dan. Tôi sẽ trường kinh doanh qua từ các bạn, và tôi đã được trong Thủy quân lục chiến trước đây, và điều này là tất cả mới với tôi, do đó, yeah. Không cảm thấy xấu, tôi là 30 và tôi không biết bất kỳ công cụ này. Tuyệt vời, cảm ơn, Dan! Được rồi, chúng tôi đã nhận một Daniel. Bạn đi bởi Daniel - bạn sẽ giới thiệu về mình, Daniel? >> Chắc chắn, tôi là Daniel. Tôi là một sinh viên năm thứ hai tại Mather ngay bây giờ. Tôi tập trung vào chính phủ, nhưng tôi muốn CS50 bởi vì tôi đã nghe đánh giá về lớp và tôi đã không bao giờ cố gắng CS trước. Di chuyển xuống đây và cho thấy mát mẻ. Di chuyển trên, Jared. Việc thế nào? >> Tốt, thế nào là bạn? Như bạn có thể thấy, tôi là một cơ sở triết lý tập trung trong Eliot, có nguồn gốc từ miền Nam California, và tôi quan tâm đến việc tham gia CS50 vì tôi thích logic của nó, và có vẻ như thực sự mát mẻ để làm những việc trên máy tính, vì vậy. Hoàng; nơi ở miền Nam California từ đâu? >> Về một giờ từ [không nghe được], một thành phố nhỏ [không nghe được. Oh, yeah, cha tôi từ Redlands. Mát công cụ. Được rồi, Jimmy, làm thế nào nó đi, Jimmy? >> Tốt, là bạn? Làm khá tốt! Cho chúng ta biết về chính mình. >> Tôi là một sinh viên năm thứ nhất, và tôi không hoàn toàn chắc chắn những gì tôi đang chuyên ngành nhưng tôi là kinda nghiêng về phía kinh tế. Như Daniel trước tôi, tôi đã không bao giờ thực hiện bất kỳ CS, nhưng nó âm thanh kinda mát mẻ. Tôi ban đầu từ Chicago. Awesome. Vì vậy, kiểm tra bản in của mình ở đây. Tôi muốn hỏi, đã làm điều này in ra như bạn mong đợi? >> Không có ai, tôi quên để in một dòng mới. Tôi thực sự quên rằng khi tôi đã viết điều của tôi lần đầu tiên, quá. Đó là loại đau đớn để nhớ để đặt những người trong tay. Nó muốn được tốt đẹp nếu nó chỉ biết đó là những gì bạn muốn. Được rồi, Kelly. Wow, chúng tôi có 2 Kellys, 2 Daniels, 2 Kellys. Vì vậy, Kelly - để bạn đi bởi Kelly Ren? Được rồi, awesome. Hoặc Kelly, tôi có ý nghĩa. >> Vì vậy, yeah, vì vậy tôi Kelly. Tôi là một sinh viên năm thứ hai trong Pfoho. Tôi nhận được một e-mail mà tôi vẫn còn có 7 tuần để khai báo tập trung của tôi ngày hôm nay, vì vậy tôi đang cố gắng không nghĩ về nó, và tôi thích làm bánh, chạy, và Craisins. Tôi không có kinh nghiệm với hầu hết của CS; Tôi đã dạy bản thân mình để xây dựng trang web khi tôi còn rất trẻ, nhưng tôi nghĩ rằng có lẽ tôi đã dạy bản thân mình sai rất nhiều lần. Hy vọng rằng tôi sẽ tìm hiểu thêm một chút nữa - yeah. Tuyệt vời, tốt, cảm ơn bạn. Chúng ta hãy đi đến Kelly khác; Tôi không có bất cứ điều gì bạn nói điều gì đó ở đây? >> [Không nghe được] Nó được! Sweet! >> Tất cả phải, vì vậy tôi Kelly. Tôi là một sinh viên tốt nghiệp năm đầu tiên. Tôi chuyên ngành Tâm, Brain Giáo dục và. Tôi tốt nghiệp ở Franklin & Marshall College trong năm 2008 với chuyên ngành tâm lý học và xã hội học và trẻ vị thành niên tại Pháp. Tôi đang dùng CS50 bởi vì tôi là quan tâm đến việc nhận được một tiến sĩ về khoa học thần kinh và tôi cảm thấy như thế này sẽ giúp tôi hiểu các công nghệ đang được sử dụng. Awesome. Di chuyển trên, Mikaela. Rằng cách phát âm chính xác không? Được rồi, awesome. >> Tôi Mikhaila. Tôi là một sinh viên năm thứ hai ở Kirkland House, và tôi đang tập trung Kỹ sư cơ khí. Tôi thực sự thích đi xe đạp, xây dựng một xe đạp vào mùa hè này. Tôi đang dùng CS, trên thực tế, như là một yêu cầu tập trung, nhưng bạn biết, tôi nghĩ rằng nó vẫn còn mát mẻ của lớp kỹ thuật. Awesome - bạn xây dựng một chiếc xe đạp vào mùa hè này? >> Yeah. Wow, như khung và tất cả những điều đó? >> Uh-hunh (khẳng định). Wow, đó là thực sự mát mẻ. >> [Không nghe được trò chuyện off-camera] [Cười] Yeah, nó đã lâu. Bạn không bao giờ biết được, phải không? Vâng, mát, tốt nhờ, Mikhaila. Được rồi, Missy. >> Tên tôi là Missy, tôi là một sinh viên năm thứ nhất, điều đó có nghĩa là tôi không biết bất cứ điều gì! Tôi muốn tập trung trong vật lý thiên văn. Trong CS50, Tôi cảm thấy như chắc chắn sẽ giúp với điều đó. Một thực tế kỳ lạ về tôi là tôi là một người lính cứu hỏa quốc gia chứng nhận. Wow! Làm thế nào điều đó xảy ra? >> Tôi đã tham dự một học viện và đã đi qua địa ngục cho rất nhiều tuần và có chứng nhận của tôi. Wow, congrats! Đó là không nhỏ, chắc chắn. Được rồi, vì vậy bây giờ chúng tôi sẽ làm cho tôi. Tôi là một trong những kế tiếp trong hàng này. Tôi - chạy nó. Vì vậy, tôi tên là Nate. Tôi là lớp học năm 2009 tại Đại học Stanford. Tôi là một hệ thống biểu tượng lớn, đó là tương tự như nồng độ Tâm Brain, Behavior, ở đây, nhưng đó là một kết hợp của khoa học máy tính, ngôn ngữ học, tâm lý học và triết học. Loại - yeah, rất nhiều thứ lạ, nhưng nó là rất lớn, và sau đó, tôi đã làm chủ tôi trong khoa học máy tính, là tốt. Vì vậy, tôi mới vào trường Harvard năm nay. Tôi thực sự muốn để có được vào giảng dạy. Tôi đã dành 4 năm qua tại Stanford TA-lớp Khoa học Máy tính và như vậy David hãy để tôi đến, và tôi sẽ được giúp đỡ với CS50, vì vậy tôi làm toàn thời gian này, tôi không học ở đại học. Nó được vui vẻ. Hy vọng rằng nó sẽ tiếp tục được vui vẻ, tôi chắc chắn rằng nó sẽ. Được rồi, Sam. >> Tên tôi là Sam, tôi là một sinh viên năm thứ hai tại trường, pháp luật cụ thể. Chính của tôi sẽ là lịch sử khoa học, có thể, và VES thứ cấp, và màu sắc yêu thích của tôi là màu vàng. Không cần phải vượt qua bản án hoặc bất cứ điều gì, nhưng đó là một màu sắc tốt! Stella. >> Hi, tôi Stella, tôi là một sinh viên năm nhất Grays. Tôi không có đầu mối những gì tôi đã tập trung trong chưa, để CS50 là chỉ cần loại ngẫu nhiên, đó là thú vị. Thực tế thú vị, Jimmy là Harvard người bạn của tôi, bởi vì chúng tôi cả hai từ Chicago. Mát mẻ, và Grace - đó là nghĩa vụ là một trong những thực sự tốt đẹp, phải không? >> Tôi nghĩ không nghe được]. Oh, yeah. [Không nghe / off-camera trò chuyện] Được rồi, tôi vẫn học tập, vẫn còn đang học. Vì vậy, chúng tôi đã có cái gì khác đó là loại thú vị ở đây. Yeah, Tôi chỉ tự hỏi, bạn có một ý tưởng đó là xảy ra ở đây? Bạn biết làm thế nào để giải thích điều này? >> Tôi phải được đặt dấu chấm phẩy sau mỗi dòng. Đó là loại đau đớn. Đôi khi những dấu chấm phẩy có thể là một nỗi đau thực sự để theo dõi. Vì vậy, nó quay ra rằng chương trình đặc biệt mà chúng ta đang sử dụng trong năm nay để biên dịch mã C của chúng tôi được gọi là kêu vang, và lý do chúng tôi đã bắt đầu sử dụng Clang năm nay - bởi vì chúng tôi đã không được sử dụng chương trình đó trong quá khứ; chúng tôi đã sử dụng một số khác được gọi là GCC đó là thực sự phổ biến - Clang thực sự cung cấp cho bạn các thông báo lỗi đó có ý nghĩa. Này nói rằng "dự kiến ​​';' sau khi biểu hiện", và thậm chí nó sẽ cho bạn biết các biểu hiện sau đó bạn cần thiết một dấu chấm phẩy. Vì vậy, bạn sửa chữa nó? >> Yeah, ngay bây giờ. Tuyệt vời, cho tôi biết và chúng tôi sẽ kéo nó lên, và chúng tôi sẽ chạy nó. Nhưng yeah, đặt những dấu chấm phẩy trong là loại đau đớn. >> Tôi cố định nó, vì vậy tôi nghĩ rằng nó phải làm việc. Awesome - sửa đổi 3. Điều đó có vẻ như nó. Được rồi, vì vậy bây giờ nếu chúng ta chạy nó, có nó đi. Mát công cụ. Được rồi. Vì vậy, để làm điều đó. Thật tuyệt khi được gặp các bạn. Những gì chúng ta sẽ làm là chi tiêu ít bit tiếp theo kinda lặn vào các vấn đề phần đến từ các vấn đề thiết lập từ tuần này và chúng tôi sẽ làm điều đó cho hầu hết các phần cho phần còn lại của thuật ngữ này, và sau đó chúng tôi sẽ tiết kiệm cuối cùng 15, 20 phút hoặc lâu hơn để nói về vấn đề thiết lập chính nó và sau đó chỉ cần bất kỳ câu hỏi khác bạn có nói chung về lớp. Điều đó nói rằng, những gì chúng tôi thực sự muốn làm là có tất cả mọi người tham gia bằng cách sử dụng các công cụ Spaces, ném trong mã, ném vào các đề nghị, và nói về khi mọi thứ như thế này nghỉ ngơi hoặc không làm việc, chỉ vì đây là những điều mà Tôi biết tôi đi qua khi tôi bắt đầu mã hóa, và thực sự kinda bực bội ở lần bởi vì nếu nó như 2 sáng trước khi vấn đề của bạn là do, - chỉ cần tiết lộ, Tôi đã không bắt đầu lập trình cho đến khi tôi còn là một sinh viên năm thứ hai ở trường đại học. Đó là loại điều kỳ lạ này chưa biết, mà tôi đã nghe được kinda Tôi cũng nghe nói nó có thể là một nỗi đau thực sự trong mông nếu bạn bỏ lỡ một dấu chấm phẩy và đó là lỗi duy nhất giữ chương trình làm việc của bạn từ và giữ cho bạn đi ngủ, vì vậy chắc chắn, nếu bạn có câu hỏi như vậy, nếu bạn có mối quan tâm như vậy, cho tôi biết, bởi vì tôi muốn làm cho một kinh nghiệm tốt cho các bạn. Vì vậy, có bạn tải về tất cả các vấn đề thiết lập chưa? Kinda biết nó ở đâu? Okay. Vì vậy, chúng ta sẽ đến cs50.net, bởi vì tôi không có nó trên tài khoản này, kéo lên các bộ vấn đề, kéo lên bộ vấn đề 2, và chúng ta sẽ xem xét phiên bản tiêu chuẩn. Chúng tôi sẽ kéo lên các đặc điểm kỹ thuật ở đây. Di chuyển xuống. Vì vậy, chúng ta sẽ bắt đầu tìm kiếm ở phần này của câu hỏi. Bạn đã xem những quần short? Okay. Vì vậy, có quần short trên vòng, được thực hiện bởi Tommy, một trong các nghiên cứu sinh giảng dạy đầu. Có một phạm vi, Tôi tin rằng thực hiện bởi một giáo viên giảng dạy khác có tên David và sau đó một ngày Caesar Cipher cũng được thực hiện bởi David. Họ đang khá mát mẻ. Bạn đã xem quần short của họ cho đến nay? How've họ được? Có hữu ích? Được rồi, tốt để biết. Nếu họ không, bạn có thể nói như vậy. Nhưng trước khi làm, có bạn nhìn những câu hỏi này ở tất cả? Chúng ta hãy nói về điều này một chút. Vì vậy, chúng tôi đã giới thiệu trong vài tuần qua trong bài giảng một số của các vòng khác nhau. Có cho vòng lặp, vòng lặp trong khi, và sau đó vòng lặp do-trong khi, và trong bài giảng, chúng tôi đã nói chuyện rất nhiều về làm thế nào những vòng là tất cả khá giống nhau về rất nhiều cách khác nhau, và bạn có thể làm được gì nhiều trong những điều tương tự với một vòng lặp trong khi mà bạn có thể với một vòng lặp cho. Bạn chỉ cần có loại sử dụng các kết hợp của các biến và như vậy. và như vậy thực sự sự khác biệt thực sự giữa tất cả các vòng lặp là đôi khi chúng hữu ích hơn để sử dụng chúng tại một thời gian hơn tại một thời điểm khác. Vì vậy, ví dụ, vòng lặp trong khi khác nhau từ một vòng lặp do-trong khi. Có tất cả mọi người cảm thấy như họ có xử lý tốt khi một vòng lặp trong khi hữu ích hay những gì khác biệt? >> Tôi nghĩ rằng sự khác biệt là một vòng lặp do-trong khi chạy - Tôi không biết hoàn toàn những gì về thuật ngữ có, nhưng hàng loạt các chức năng bên trong vòng lặp. Họ tự động - nó chạy ít nhất trước khi kiểm tra điều kiện, hoặc vòng lặp while sẽ chỉ chạy khi nó chạy liên tục - có hoặc không có điều kiện được thỏa mãn. Yeah, điều đó có ý nghĩa? Chúng ta hãy xem xét một chút mã Vì vậy, chỉ cần nhắc lại câu hỏi, hoặc câu trả lời, thay; câu trả lời là một vòng lặp while sẽ kiểm tra xem nếu điều kiện mà bạn chỉ định được đáp ứng trước khi nó chạy cơ thể của vòng lặp cho lần đầu tiên, trong khi do-trong khi vòng lặp sẽ chạy tự động cơ thể của vòng lặp, là những gì chúng tôi gọi nó - đó là lạ thuật ngữ, nhưng nếu tôi bao giờ nói bất cứ điều gì mà không có ý nghĩa, cho tôi biết - thân vòng lặp là những công cụ mà bạn đưa vào giữa các dấu ngoặc nhọn. Và trong vòng lặp do-trong khi, mà cơ thể được chạy ít nhất một lần, và sau đó điều kiện được kiểm tra trước khi nó chạy mỗi lần kế tiếp. Vì vậy, trên thực tế, Sam, làm bạn nhớ viết một đơn giản trong khi vòng lặp trong các không gian? >> Làm sao bạn sắp xếp giống như làm cho một ...? Tôi chỉ cần xóa bất cứ điều gì bạn có trong đó. Yeah, chỉ cần xóa nó ra. >> Vâng, tôi tin rằng tôi có điều này - mà một trong những bạn muốn, một thời gian, hay bạn muốn ...? Yeah, chỉ cần làm một trong khi sự thật, in cái gì. Và chúng ta hãy xem. Alexander, tôi nhận ra rằng chúng ta không bao giờ giới thiệu cho bạn. >> Oh, đó là tốt. Bạn có - bạn có thể mã lập một vòng lặp do-trong khi đối với chúng ta? >> Vâng, tôi sẽ cố gắng. Được rồi, chúng tôi sẽ chỉ kéo những lên trên màn hình, để bạn loại có một xử lý về những gì khác biệt. Vì vậy, đây là những gì Sam đã làm. Ông có một số nguyên tên gọi là i rằng ông khởi tạo đến 17. Sau đó ông nói trong khi (int i = 17) printf ("Tên của tôi là Sam."); Vì vậy, những gì sẽ xảy ra khi chúng ta chạy mã này? Có một lỗi, lỗi nói gì? Hãy kéo nó lên và nói về nó. Đã xảy ra lỗi, nó nói. Hãy di chuyển xuống. Vì vậy, nó đã cho chúng tôi lỗi này, và nó nói, "Này, tôi mong đợi một biểu thức." Đó là kinda khó hiểu. Yeah, vì vậy chính xác - và một lần nữa, sẽ có một lỗi nhỏ mà chúng tôi sẽ bắt chỉ trong một giây. Nhưng đây là một một trong những loại những điều kỳ lạ thuật ngữ, do đó, điều này int i = 17 không phải là một biểu thức. Những gì có vẻ như nó làm là nó kê khai một số nguyên tên gọi là i và thiết lập nó bằng đến 17 hoặc, đúng hơn, đặt 17 vào int mà tên gọi là i. Và điều đó không có ý nghĩa trong bối cảnh này vòng lặp trong khi. Nó không có ý nghĩa, như chúng ta sẽ thấy, trong bối cảnh của một cho vòng lặp, bởi vì khai báo vòng lặp bắt đầu với int i bằng gì gì đó và đi vào. Vì vậy, còn bạn thì sao - sửa chữa một cái gì đó, tất cả các quyền. Ở đây nó đi; awesome. Vì vậy, bây giờ mọi chuyện có vẻ khác một chút. Một vài điều đã thay đổi. Bạn có thể cho chúng tôi biết những gì đã thay đổi? >> Tôi đã diễn ra các int, do đó, không có khai báo [không nghe được] thay vì chuyển nhượng. Một dấu bằng, tôi đặt 2 dấu bằng, có nghĩa là một dấu bằng. Awesome. Yeah, vì vậy những gì Sam đã được ông int đó là ngay tại đây trước đó, vì vậy nếu tôi chỉ cần nhìn vào điều này - đây là những gì nó đã được trước đó, nó nói int, được tuyên bố nó - vì vậy chúng tôi đưa ra các loại. Có int, string, char, short, những người được gọi là các loại. Vì vậy, bạn lấy ra các loại và sau đó trước đây, ông đã có chỉ duy nhất dấu bằng và những gì ông nói là vấn đề này đã được khi bạn có 1 dấu bằng, đó là một nhà điều hành chuyển nhượng. Đó không phải là thử nghiệm có hoặc không có 2 thứ đều bình đẳng. Đó là thực sự thiết lập một cái gì đó bằng một cái gì đó. Chúng tôi đang đặt số 17 vào i biến. Vì vậy, để làm điều đó loại so sánh, bạn phải sử dụng đôi bằng, mà là một loại của một điều kỳ lạ nhưng là một lỗi khá phổ biến. Vì vậy, một trong những điều khác tôi sẽ chỉ ra, nếu quý vị không nhớ, là trong chức năng của chúng tôi ở đây trong int main, bạn thấy rằng các cơ quan chức năng của chúng ta được bù đắp từ phía bên trái 4 không gian hoặc tab. Lý do chúng tôi làm điều này chỉ là cho dễ đọc. Như bạn có thể thấy trong vòng lặp trong khi Sam ở đây, ông không thụt ở tất cả, và điều đó không ảnh hưởng đến các chức năng của mã này. Nó sẽ chạy chính xác như nhau. Vì vậy, ví dụ, nếu chúng ta lên đến đỉnh và nhấn nút Play của chúng tôi, nó sẽ xây dựng nó, nó sẽ chạy nó, và những gì sẽ xảy ra? Tại sao nó vẫn nói rằng chạy? >> Bởi vì nó sẽ tiếp tục lặp đi lặp lại hi. Chính xác, và lý do tại sao không tiếp tục lặp đi lặp lại hi? >> Bởi vì số nguyên không bao giờ thay đổi, do đó, nó luôn luôn là 17. Yeah, chính xác, do đó, chúng ta hãy xem, sau khi nhắc nhở tôi về tên của bạn một lần nữa? Jimmy. Vì vậy, Jimmy nói rằng Vì lý do này tiếp tục lặp đi lặp lại hi hơn và hơn nữa là bởi vì tình trạng này là luôn luôn đúng. Chúng tôi không bao giờ thay đổi giá trị của i. Chúng tôi không bao giờ thay đổi các nội dung của những gì được lưu trữ trong biến đó. Vì vậy, tại thời điểm này, chúng tôi đã nhận lỗi này chương trình của bạn tạo ra sản lượng quá nhiều, và nếu chúng ta di chuyển xuống và xem những gì đang xảy ra ở đây, bạn có thể thấy rằng nó là hi, hi, hi, hi, hi, hi, hi tất cả các cách thông qua. Awesome. Vì vậy, loại trở lại điểm ban đầu rằng có thụt đầu dòng trong cơ thể của vòng lặp trong khi không ảnh hưởng đến bất cứ điều gì. Chương trình vẫn chạy tốt. Điển hình cho phong cách tốt - và điều này là một cái gì đó mà chúng ta tìm kiếm trong bộ vấn đề của bạn - chúng tôi yêu cầu bạn để indent điều này bằng cách 4 không gian, bạn có thể làm bởi chỉ cần nhấn phím tab hoặc bằng cách đặt trong 4 không gian chính mình. Cool, ổn do đó, chúng ta hãy quay trở lại và xem xét Alexander do-while. >> Chỉ cần kinda gặp một chút rắc rối. Được rồi, chúng ta hãy làm việc thông qua nó. That cool? >> Yeah. Được rồi, vì vậy ở đây chúng tôi đi. Đây là mã rằng Alexander đã viết. Bạn có đi bởi Alex - okay. Vì vậy, đây là đoạn code mà Alex đã viết. Vì vậy, chúng tôi đã có tuyên bố của chúng tôi của chính ngay tại đây, và sau đó chúng tôi đã bị này biến số nguyên tên gọi là i được tuyên bố ngay tại đây. Chúng tôi đã có một tuyên bố do và sau đó cơ thể một lần nữa với những niềng răng, vì vậy đây là cơ thể của do-trong khi cho tôi phóng to trong ngày này nên nó dễ đọc hơn - và trong cơ thể, chúng tôi đang cố gắng để in "đây là cơ thể", i + +, do đó, tăng các nội dung của i và làm điều này cho đến khi tôi nhận được là 3, và sau đó chương trình của chúng tôi kết thúc. Vì vậy, những gì sẽ xảy ra khi chúng ta chạy chương trình này? >> Tôi mong đợi một định danh. Được rồi, do đó, xây dựng, chạy, lỗi xảy ra. Điều gì sẽ xảy ra? Chúng tôi di chuyển xuống ở đây, chúng tôi có được điều này hơi khó hiểu, dự kiến ​​sẽ dấu chấm phẩy sau khi khai báo cấp cao nhất. Đó là kinda lạ. Có ai có một ý tưởng về những gì có thể xảy ra? Kinda lạ, yeah. >> [Không nghe được] được khai báo bên ngoài dấu ngoặc đơn? Vì vậy, không không áp dụng sau khi bạn sử dụng dấu ngoặc đơn? Vì vậy, ông tuyên bố anh chàng này bên ngoài trong đó dấu ngoặc đơn? Oh, những kẻ - dấu ngoặc nhọn? >> Yeah. Yeah, chính xác. Vì vậy, nó quay ra rằng bạn có thể không thực sự khai báo một biến ngay tại đây như thế này. Những gì bạn có thể đã cố gắng để làm là - cắt nó ra khỏi đó - bạn có thể đặt nó trong dấu ngoặc nhọn ngay tại đây hoặc một thay thế là để đặt nó hoàn toàn bên ngoài. Và do đó, những tùy thuộc vào nơi bạn thực sự đặt việc kê khai đó biến số nguyên, bạn có thể nhận được 2 loại rất khác nhau của các biến; khi nó ở bên ngoài của chính, đó là những gì chúng ta gọi là một biến toàn cầu. Đó là ngoài phạm vi của bất kỳ chức năng - nó không phải trong phạm vi chức năng - trong khi đó nếu chúng ta đặt nó bên trong của chính, thích ngay tại đây, sau đó nó được gọi là một biến địa phương, bởi vì nó là địa phương trong phạm vi của chính. Và chúng tôi sẽ nói một chút về những gì khác biệt giữa 2 loại và lý do tại sao bạn sử dụng các loại khác nhau của các biến, nhưng bây giờ, bạn chỉ có thể giữ tất cả các biến địa phương, vì chúng tôi không có bất kỳ nhu cầu cho các biến toàn cầu. Được rồi, vì vậy đó là một điều phải có. Chúng ta hãy thử chạy này một lần nữa, xem những gì sẽ xảy ra. Run, nhận được một lỗi. Phóng to một chút, chúng tôi nhận được gì? Chúng tôi nhận được điều này ngoặc dự kiến ​​sau khi làm / trong khi. Bất cứ ý tưởng gì đang xảy ra? Dan? >> Trong khi sau đó ngoặc đơn và sau đó - Tôi không biết nếu bạn cần phải redeclare int, nhưng trong khi (i <3). Chính xác, yeah. Vì vậy, nó quay ra rằng Dan là chính xác. Chúng tôi không cần phải đặt loại này ở đây một lần nữa. Chúng tôi thay vào đó có thể giết chết các loại và chỉ cần làm điều đó. Được rồi. Tôi sẽ thu nhỏ trở lại, hãy thử nó một lần nữa. Nhìn vào đó, nó chạy thành công. Nếu chúng ta di chuyển xuống, "đây là cơ thể" in ra 3 lần. Đó là khá ngọt ngào. Cũng được thực hiện, cũng được thực hiện, guys. Thực hiện tốt. Sao cho đến nay? Decent tốc độ? Được rồi, mát mẻ. Vì vậy, khi chúng ta trở lại câu hỏi ban đầu, chúng ta - và bây giờ nếu chúng ta thấy sự khác biệt, bạn thấy rằng trong vòng lặp này do-trong khi, điều kiện đến cuối cùng. Vì vậy, là máy tính đọc các chương trình kể từ khi các chương trình C được thực hiện loại theo thứ tự tuần tự, nơi họ theo nghĩa đen bắt đầu với dòng đầu tiên của chính, và sau đó thực hiện dòng 6, 7 dòng, dòng 8, đường 9, 10 dòng, 11 dòng, tất cả các công cụ này ở đầu ngay tại đây sẽ thực hiện một lần trước khi chúng tôi kiểm tra điều kiện này để xem hay không i - hoặc nội dung của tôi, chứ không phải ít hơn số 3. Và chỉ nếu một khi chúng ta nhận được dòng 12, các nội dung của i có ít hơn 3 chúng tôi thực sự nhảy trở lại lên đến dòng 7 và sau đó lặp lại quá trình, và sau đó chúng tôi kiểm tra các điều kiện một lần nữa và một lần nữa và một lần nữa. Vì vậy, chúng ta có thể tương phản này - phóng to trở lại, di chuyển xuống phiên bản của Sam, chúng ta sẽ xem xét điều này, thay đổi một chút để nó không còn một vòng lặp vô hạn - nếu chúng ta phóng to, chúng ta thấy rằng, cũng như chương trình này thực hiện, nó sẽ kê khai lần đầu tiên int i, thiết lập các nội dung của i là 0, và sau đó nó lượt truy cập các điều kiện đầu tiên vòng lặp trong khi, do đó, trong trường hợp này, cơ thể, điều này ("hi") printf và i + + thậm chí sẽ không thực hiện trừ khi tôi thực sự là nhỏ hơn hoặc bằng 2. Vì vậy, nếu tôi là 3, ví dụ, nếu chúng ta thiết lập này ngay tại đây bằng 4 hoặc tôi sẽ làm 3, bởi vì tôi đã nói 3 - và sau đó chạy nó, nó sẽ xây dựng, nó sẽ chạy hoàn toàn tốt, nhưng nó sẽ không thực sự in ra bất cứ điều gì, bởi vì nó không thành công thử nghiệm cho trường hợp đầu tiên. Vì vậy, trong lớp học, chúng ta đã nói về lý do tại sao những vòng lặp do-trong khi hữu ích đôi khi và lý do tại sao chúng tôi sẽ sử dụng nó như trái ngược với một vòng lặp while. Có - bạn có bất cứ đề nghị cho lý do tại sao một trong khi vòng lặp có thể là hữu ích hơn? >> Vâng, tôi nghĩ làm trong khi các vòng là nếu bạn muốn người dùng nhập vào, vì như vậy bạn có thể cho họ đặt một cái gì đó trong một lần, nếu nó đúng, chúng ta có thể chuyển sang phần còn lại của chương trình, nhưng nếu nó không phải là chính xác, sau đó bạn tiếp tục khiến người sử dụng cho đến khi bạn đặt đầu vào bên phải. Yeah, chính xác - chính xác, do đó, một do-trong khi vòng lặp là hữu ích bởi vì khi khiến cho người sử dụng đầu vào bởi vì bạn cần để có được đầu vào của người sử dụng trước khi bạn thực sự có thể kiểm tra xem nó. Vì vậy, trong pset 1, pset 2, nơi bạn đang khiến cho người dùng nhập vào rất nhiều, đó là một điều thuận tiện để sử dụng như trái ngược với chỉ là một vòng lặp trong khi đơn giản. Nếu bạn sử dụng một vòng lặp trong khi, bạn có thể làm điều tương tự - bạn có thể làm điều tương tự với một vòng lặp while như bạn làm với một vòng lặp do-trong khi. Bạn chỉ cần có của loại hình có quá trình này trùng lặp nơi bạn có được đầu vào đầu tiên và sau đó bắt đầu vòng lặp trong khi của bạn. Trong khi đó, do-trong khi vòng lặp, bạn chỉ cần phải viết nó một lần và nó là một sạch hơn rất nhiều. Được rồi. Bất kỳ câu hỏi nào? Có ý nghĩa? >> Sự trở lại 0 - đó là chỉ cần loại một gian hàng hoặc là nó? Yeah, vì vậy chúng tôi có thể - tốt, chúng tôi sẽ đề cập đến điều này hơn một chút sau nhưng nó quay ra rằng này 0 trở lại mà chúng ta đặt vào cuối thời gian chính tất cả các - bạn có thể kinda chỉ cần mang nó như là một cái gì đó chúng tôi làm cho thời gian được. Những gì chúng ta đã bắt đầu nói về với chức năng loại vào cuối tuần trước và sau đó một lần nữa trong tuần này là một chức năng mất đầu vào là những điều này trong dấu ngoặc đơn; đây là 2 đầu vào, lập luận hoặc các thông số của chúng tôi, những gì họ đang còn được gọi là chức năng chính của chúng tôi, và sau đó một chức năng sản xuất một đầu ra mà chúng ta gọi là giá trị trả về. Và giá trị trả lại trong trường hợp chính là int này, này số nguyên, và cách bạn nói với một chức năng, "Hey, đây là đầu ra của bạn là có được ", với từ" return ", từ khoá đó, chứ không phải, và như vậy chính trở về 0 hoặc chính outputting 0 là tiêu chuẩn trong các chương trình C bởi vì trở về 0 từ các phương tiện chính mà "Hey, tất cả mọi thứ được thực hiện với chương trình chỉ tốt của tôi." Nếu chúng ta đặt một cái gì đó khác hơn 0, như 1, ví dụ, được sử dụng để nói cho bất cứ ai chạy chương trình này một điều gì đó đã đi sai. Vì vậy, khi chúng ta tham gia nhiều hơn với các công cụ trên học kỳ, nếu bạn đã bao giờ cần phải nói, "Rất tiếc, bạn đã biết, một cái gì đó đã đi sai với chương trình này", thay vì phải cố chương trình của tôi, tôi muốn thông báo cho Á hậu của chương trình tôi một điều gì đó đã đi sai, bạn có thể sử dụng giá trị trả về khi chúng tôi gọi nó, đó là không phải 0. Vì vậy, chúng ta sẽ bàn thêm một chút nữa một khi chúng tôi nhận được vào các chức năng. Đó là loại làm cho tinh thần? Okay. Chức năng này là loại kỳ lạ - Tôi nghĩ rằng đối với những người có nhiều của nền toán học, nói một chút dễ dàng hơn, đặc biệt là nếu bạn có nền toán học trừu tượng hơn một chút và bạn đang sử dụng để nói về chức năng và tất cả những loại công cụ. Nhưng chúng tôi sẽ cố gắng và bao gồm chúng và đi tốt đẹp và chậm chạp khi chúng xảy ra. Tương tự như vậy, điều này toàn bộ int argc, char * argv [], cho ngay bây giờ, bạn cũng có thể đi mà tấm nồi hơi như. Chúng tôi đã bắt đầu để trang trải những một chút trong bài giảng khi chúng ta nói về các đối số mà có được thông qua vào các chương trình trên dòng lệnh, nhưng trong bộ vấn đề của bạn và các chương trình, nó hoàn toàn tốt chỉ để viết vô hiệu và giữ cho nó đơn giản. Và những gì trống điều này có nghĩa là "Này, chính là sẽ không chấp nhận bất kỳ đầu vào; đây chỉ là một chương trình chúng tôi đang gonna chỉ cần chạy. Chúng tôi sẽ không cho nó bất kỳ thông tin bổ sung mỗi lần chúng tôi bắt đầu nó lên chạy. " Vì vậy, bây giờ, bạn có thể làm điều này; bạn thậm chí cũng có thể bỏ qua 0 trả vào cuối chương trình của bạn và họ sẽ chỉ chạy tốt, nhưng tôi khuyên bạn chỉ cần giữ. Trong một vài tuần, chúng tôi sẽ bắt đầu loại kéo trở lại nắp một chút và hiểu thêm về tất cả những người ít di chuyển các bộ phận khác nhau. Được rồi, bây giờ chúng ta hãy nói về câu hỏi thứ hai của chúng tôi ở đây. Vì vậy, "không khai báo định danh" thường chỉ ra những gì nếu kết quả bằng Clang? Tôi nghĩ rằng chúng ta có thể đã thấy điều đó ngày hôm nay. Ai đó có thể đưa ra một bản tóm tắt về điều đó có nghĩa là gì? Hãy xem, Kelly - một trong các Kellys. >> - Yeah, những gì hiện - >> Tôi nghĩ rằng khi bạn, như, không khai báo các biến và bạn cố gắng để sử dụng nó. Yeah, chính xác, chính xác. Vì vậy, nếu bạn đã bao giờ thấy điều này đầu ra khi bạn cố gắng và biên dịch chương trình của bạn, giống như Kelly cho biết, nó có nghĩa là bạn sử dụng một biến rằng bạn đã không tuyên bố, do đó, nếu tôi đi trở lại không gian của chúng tôi, và tôi làm một cái gì đó như printf ( "Hello% s") và cố gắng và điền vào% s với một biến mà tôi đã không tuyên bố bất cứ nơi nào và tôi cố gắng để chạy nó, bạn sẽ thấy những gì tôi nhận được ở phía dưới này ngay tại đây: "Sử dụng không khai báo định danh 's'"; mà chỉ có nghĩa là bạn không khai báo biến của bạn. Điều tương tự cũng sẽ xảy ra nếu bạn có x và bạn cố gắng và lưu trữ 7 trong đó và tôi đã không tuyên bố X. Tôi nhận được rằng lỗi tương tự: "Sử dụng không khai báo định danh 'x'". Được rồi, để Ban Cơ yếu Caesar, không phải là rất an toàn, Tôi sẽ để cho các bạn xem loại này, ngắn hiểu tại sao, và hy vọng sau khi thực hiện vấn đề này trong tuần thiết lập mà bạn thực sự viết Cipher Caesar, bạn sẽ hiểu hơn một chút về những gì nó có nghĩa là để được an toàn và không an toàn hoặc không an toàn, tôi đoán - không an toàn là hơi khác nhau. Điều khác là chúng tôi có những câu hỏi khác ở đây về chức năng và những gì một chức năng, và chúng tôi loại nói vắn tắt rằng khi chúng tôi nói chuyện về các giá trị trả lại; cho ai đó được giảng dạy, bạn có thể tóm tắt lại những người đang được giảng dạy ngày hôm nay? Được rồi. Hãy xem, chúng ta hãy có ai đó có thể cho chúng tôi biết những gì một chức năng là? Kelly? >> Về cơ bản một cái gì đó bạn rút ra sau khi một cái gì đó là được viết trong các thư viện đó là phức tạp hơn ở đó, và sau đó bạn chỉ cần viết một hình thức ngắn của nó, như vậy giống như bạn đang đề cập trở lại thư viện đó, bằng cách sử dụng tất cả những mã dài và không nghe được. Yeah, chính xác, và sau đó bạn muốn thêm một cái gì đó với điều đó? >> Yeah, tôi nghĩ về nó như là tương tự như khái niệm của một công thức trong toán học mà bạn chỉ cần viết một công thức và sau đó bạn có thể cắm các biến trong và đó là những gì một chức năng là không nghe được. Yeah, vì vậy chúng tôi đã có một vài câu trả lời ở đây mà là cả hai thực sự tốt và phải trên. Có đề cập đến mã đó là được viết trong thư viện một nơi nào đó đó là phức tạp hơn và sau đó bạn có thể rút ra sau khi mã đó và thực sự sử dụng nó bằng cách chỉ cần viết dưới hình thức ngắn của nó - hoặc, đúng hơn, tên của nó - và sau đó có so sánh này một công thức trong toán học hoặc vật lý, tất cả những loại công cụ nơi bạn có một công thức và sau đó bạn có thể cắm vào các biến để công thức sau đó nhận được kết quả của công thức, vì vậy bạn nghĩ về nó như là giống như phương trình bậc hai. Hãy tưởng tượng nếu thay vì phải để tìm hiểu về công thức bậc hai là trong lớp học toán, bạn chỉ cần có một chương trình máy tính nhỏ mà đã làm điều đó cho bạn. Có ai sử dụng các chương trình máy tính trong lớp học toán học ở trường trung học? Yeah, vật lý lớp học? Nơi mà bạn chỉ có thể nói, "Này, công thức bậc hai. Đây là những biến số mà tôi muốn đầu vào. Bây giờ cho tôi câu trả lời. " Đó là một chức năng là những gì. Đó là một cách để chúng tôi loại viết giống như một chương trình nhỏ tiểu ít trong chương trình lớn hơn của chúng tôi và sử dụng nó hơn và hơn nữa do đó chúng tôi cần phải sao chép và dán mã, chúng tôi có thể cung cấp cho nó đầu vào khác nhau và nhận được kết quả đầu ra khác nhau, siêu tiện dụng khi bạn đang cố gắng để viết các chương trình khác nhau tại các thời điểm khác nhau. Vì vậy, ví dụ, một chức năng mà chúng tôi đã sử dụng hơn và hơn và hơn nữa trong suốt khóa học là printf. Printf bản thân nó là một chức năng và nó quay ra rằng nó thực sự khá dài và phức tạp, khó chịu tìm kiếm, chức năng viết. Vì vậy, đơn giản như nó có vẻ cho chúng tôi in công cụ ra ngoài màn hình, bởi vì tất cả chúng ta đã làm điều đó vào lúc bắt đầu của ngày hôm nay phần, nó quay ra rằng nó thực sự, bạn biết, một vài trăm dòng mã. Đó không phải là một cái gì đó mà tôi sẽ bao giờ muốn viết, chắc chắn, nhưng chúng tôi có thể sử dụng nó mỗi ngày, đó là loại mát, vì vậy chúng tôi có được để chia sẻ nó với nhau, với các chương trình khác nhau, vì vậy chúng tôi sẽ lặn vào các chức năng; cho thời gian được, chúng tôi không chức năng duy nhất chúng ta sẽ được viết là chính. Chính bản thân cũng là một chức năng, và bạn có thể thấy nó có đầu ra của nó, đầu vào của nó giống như chúng tôi đã nói, và sau đó tên của nó, đó là chính. Chính là loại một - là một chức năng đặc biệt đó. Trong chương trình C của bạn, đó có phải là một chức năng chính, và bây giờ, chúng tôi đã loại bỏ qua bằng văn bản các mẫu thử nghiệm, hoặc tuyên bố, chính. Chúng tôi đã cho rằng đối với bạn, và chúng tôi đã có bạn điền vào loại những khoảng trống. >> Vì vậy, đối với các thiết lập vấn đề thứ hai, chúng tôi không cần phải viết nó trong chức năng thứ hai? Tôi không tin như vậy. Tôi tin rằng đó là tất cả ở đây. Yeah, vì vậy Caesar Cipher, bạn không có, nó không giống như thế, và Vigenere, bạn không hoặc, như vậy - và nó quay ra bạn không bao giờ thực sự phải viết một chức năng, phải không? Bạn gọi luôn đặt tất cả các mã của bạn trong vòng chính, và nhiều người lập trình làm điều đó. Như chúng ta di chuyển trên, chúng tôi bắt đầu giới thiệu chức năng như là một cách để làm sạch mã của bạn, để làm cho nó thêm thanh lịch, trong trường hợp bạn có nhiệm vụ giống như khi chúng ta nói về các vòng, đôi khi có những điều mà bạn muốn làm một lần nữa và một lần nữa và một lần nữa, và bạn có loại cách ngây thơ - hoặc những gì chúng ta thường gọi là "người rơm", giải pháp, là chỉ cần sao chép và dán hơn và hơn nữa - bạn có thể làm điều tương tự với các chức năng mà bạn chỉ cần sao chép và dán cùng mã hơn và hơn nữa, nhưng đó bloats mã của bạn - nó kết thúc lên làm cho mã của bạn thực sự lâu dài - và nó cũng được một chút bối rối, và sau đó nó có nghĩa là bạn không thể thích - nếu bạn muốn sử dụng mã một lần nữa trong một chương trình khác, bạn cũng bị mắc kẹt sao chép và dán nó một lần nữa, do đó, một trong những điều chúng ta sẽ nói về loại thiết kế và phong cách của chương trình của bạn, và do đó, khi nó làm cho tinh thần để loại gói một cái gì đó lên và đặt nó như là một chức năng riêng biệt, chúng tôi khuyến khích bạn làm điều đó, và đó là một cái gì đó, một lần nữa, không có quy tắc cứng và nhanh chóng. Chúng tôi hiếm khi nói rằng bạn phải viết một chức năng gọi này, nhưng đó là một trong những điều bạn chỉ cần phát triển theo thời gian như bạn viết chương trình nhiều hơn và nhiều hơn nữa. Bất kỳ câu hỏi? Được rồi, do đó, Bây giờ chúng ta hãy sao lưu với anh chàng này ngay tại đây, vì vậy tôi vẫn còn trong phần này của câu hỏi. Chúng tôi đã nói chuyện về tất cả những cái khác nhau, một chức năng là gì, tại sao phải viết các chức năng, khi bạn chỉ có thể sao chép và dán? Hy vọng rằng chúng tôi đã bị thuyết phục bạn rằng viết chức năng là một điều tốt. Vì vậy, bây giờ chúng ta hãy chuyển sang chương trình này MySpace, và chúng tôi sẽ dành một chút thời gian để làm điều này. Vì vậy, chúng ta hãy xem, tôi có thể có ai đó đọc này cho tôi? Hãy có Mikhaila - bạn sẽ đọc cho chúng tôi? >> Bạn có nghĩa là trở lại khi MySpace - Sao khi MySpace đã được mát mẻ. >> "Quay lại khi MySpace đã được mát mẻ, đó là tất cả các cơn giận dữ gõ như thế này. Có lẽ nó vẫn còn? Tôi không thực sự chắc chắn. Trong bất kỳ trường hợp nào, bằng cách sử dụng cụ CS50, CS50 Run, hoặc CS50 Spaces, viết một chương trình nhắc nhở người sử dụng cho một tin nhắn và sau đó kết quả đầu ra thông điệp với chữ cái đầu tiên của nó vốn, với tất cả các chữ cái khác trong trường hợp xen kẽ, theo lượng mẫu dưới đây, trong đó in đậm văn bản đại diện cho đầu vào của một số người sử dụng. Để đơn giản, bạn có thể giả định rằng người sử dụng sẽ chỉ thư đầu vào chữ thường và không gian. Hãy xem xét vấn đề này một cơ hội để thực hành; bạn sẽ không được yêu cầu nộp chương trình này. " Tuyệt vời, cảm ơn bạn. Vì vậy, như Mikhaila nói, chúng ta sẽ viết một chương trình mà myspaces mã của bạn. Vì vậy, đã có của bạn guys sử dụng MySpace? Bất kỳ của bạn có tài khoản MySpace? Oh, yeah, yeah! Đó là khá mát mẻ. [Cười] Tôi biết. Hẹn hò với bản thân mình. Vì vậy, những gì chúng tôi đang cố gắng làm là viết một chương trình mà đi qua và tận dụng chữ cái đầu tiên và sau đó mỗi chữ sau đó - hoặc mỗi lá thư khác sau đó, tôi xin lỗi. Vì vậy, - và bạn có thể thấy trong ví dụ này, đây là làm thế nào chúng ta chạy chương trình, và do đó, điều này chỉ là nói rằng, "Chúng tôi đang chạy một chương trình được gọi là a.out. Đầu vào mà chúng tôi sẽ mang lại cho nó sẽ được nhắc nhở. Chúng ta sẽ không cung cấp các đầu vào trên dòng lệnh. " Nếu bạn đã làm theo tất cả các bài giảng và nghe về các đối số dòng lệnh, đó là loại mà những người - rằng cú pháp sôi nổi tại chính đi kèm với int argc, tất cả những thứ, vì vậy ở đây chúng tôi không sử dụng đó, chúng ta không phải đối phó với bất kỳ đó. Chúng tôi chỉ gonna nhận được này gõ vào bởi người sử dụng, và sau đó dòng lệnh thứ hai có giá trị vốn sôi nổi là những gì chúng tôi muốn chương trình của chúng tôi đến đầu ra. Vì vậy, thay vì sử dụng Công cụ hoặc Run, chúng tôi sẽ sử dụng không gian, bởi vì chúng tôi đã có Spaces, và do đó, nếu bạn bạn của bạn để tìm một cái gì đó như thế này, vì vậy tôi sẽ tiết kiệm này sửa đổi chỉ cần như vậy bạn đã có tấm lò hơi ngay tại đây trông như thế này, int main (void), không có gì trong đó. Trên thực tế, những gì chúng tôi sẽ làm là chúng ta sẽ chỉ cần xóa tất cả mọi thứ với nhau. Chúng tôi muốn có một phiến đá trắng, bởi vì chúng ta sẽ không bắt đầu viết mã; đúng hơn, chúng ta sẽ thử viết một số giả mà thực sự chỉ có nghĩa là chúng ta sẽ viết một cái gì đó không phải là mã là loại mô tả những gì chúng ta muốn làm, kinda như David đã làm vào ngày đầu tiên của bài giảng, Tôi đoán đó là ngày của bài giảng thứ hai khi ông đã làm tất cả các bản demo. Các bạn hãy nhớ rằng nhìn thấy những đôi tất? Giuse là có loại gõ bằng tiếng Anh? Vì vậy, chúng ta sẽ làm điều tương tự. Vì vậy, khi tôi bắt đầu viết mã giả, Tôi muốn bắt đầu bằng cách nhìn vào những gì các đầu vào là có được Và tôi cung cấp cho bản thân mình một trường hợp mẫu, do đó, như "cảm ơn cho tiện!" Và sau đó tôi cũng viết những gì tôi muốn đầu ra được, trong trường hợp này là một cái gì đó như thế này. Và đó là loại cung cấp cho tôi một điểm khởi đầu tốt, như thế, để suy nghĩ về, "Được rồi, tôi muốn lấy dòng 1 và tôi muốn biến nó thành dòng 2, " và là loại giúp hướng dẫn suy nghĩ của tôi. Đây là một nơi tốt để bắt đầu. Một cách khác để suy nghĩ về nó, cũng như chúng tôi kinda di chuyển trên và khi bạn làm điều này trong các chương trình của riêng bạn, là để suy nghĩ về loại giống như các trường hợp cạnh này là gì? Loại của các kịch bản lạ là gì? Các yếu tố đầu vào kỳ lạ mà chúng tôi có thể nhận được là gì? Và những kết quả đầu ra nên trông như thế nào? Ví dụ, một lạ đầu vào sẽ là một trong những điều này, tạo ra hoàn toàn không có gì, giống như những gì chúng ta nên đầu ra trong trường hợp đó? Một cái gì đó chúng tôi muốn suy nghĩ về, quá. Vì vậy, chỉ cần một câu hỏi, những gì chúng ta có thể muốn đầu ra? Nếu chúng ta không nhận được bất kỳ đầu vào ở tất cả, những gì chương trình của chúng tôi được xuất ra? >> Không có gì. Không có gì? Âm thanh tuyệt vời. Vì vậy, chúng tôi muốn đảm bảo rằng chúng tôi không viết bất cứ điều gì ra nếu chúng ta không nhận được bất cứ điều gì. Cool. Okay. Vì vậy, Tôi sẽ gọi một vài người như chúng tôi đi qua và chỉ cần tìm ra loại giống như các thuật toán nói chung là và chúng tôi loại sẽ bắt đầu làm việc thông qua này lại với nhau. Vì vậy, chúng ta hãy xem. Missy. Làm thế nào để bạn nghĩ rằng chúng tôi muốn bắt đầu? Điều gì sẽ là một nơi tốt để bắt đầu ở đây nếu chúng ta muốn để biến đổi, nói, dòng 1 vào dòng 2? Bạn có thể loại chỉ cần giải thích cho tôi, bằng tiếng Anh, những gì bạn đang suy nghĩ? Thậm chí không lo lắng về mã. >> Điều đầu tiên tôi sẽ làm được loại của người sử dụng trực tiếp để nói với họ những gì bạn muốn. Được rồi, vì vậy, nói, "Này, người sử dụng. một chuỗi "awesome. Vì vậy, chúng ta hãy viết này xuống. Nhắc nhở người dùng cho một chuỗi. Mà âm thanh như một khởi đầu tốt. Được rồi. Hãy hỏi Kelly Ren thời gian này. Chúng tôi sẽ làm gì sau đó muốn làm gì tiếp theo? Loại tiếp theo của chúng là gì? >> Thu thập ý kiến ​​của họ và lưu nó như là một biến. Lớn. Vì vậy, thu thập các chuỗi, lưu trữ nó trong một biến. Vì vậy, có bất cứ điều gì đặc biệt, chúng tôi muốn làm ở đây? Chúng ta có muốn kiểm tra đầu vào của họ trước đây -? >> Yeah. Những gì chúng ta có thể muốn kiểm tra? >> Vâng, bạn nói rằng chúng ta không cần phải kiểm tra xem nó là một con số, phải không? Bởi vì nó sẽ giả sử rằng đó là chữ thường? Yeah. Vì vậy, nó quay ra rằng - yeah. Vì vậy, getString được đảm bảo trả lại cho chúng tôi một chuỗi. Nó sẽ không trở lại một số cho chúng tôi hay bất cứ điều gì như thế. Có thể có các ký tự chữ số trong chuỗi đó, mặc dù. Và những người, chúng ta có thể bỏ qua khi chúng tôi đã làm vốn. Nhưng một chuỗi rỗng là hoàn toàn tốt, do đó, trường hợp ở ngay trên dòng 4 và 5, bên phải, nơi có đầu vào không có, và chúng tôi đã không có gì là sản lượng của chúng tôi. Chúng tôi không phải lo lắng về việc bảo đảm rằng có một cái gì đó trong chuỗi hoặc rằng chuỗi là ít nhất 4 ký tự; bất cứ điều gì là tốt. Vì vậy, điều này là tương phản, ví dụ, như các chương trình đồng xu mà bạn đã viết bạn phải chắc chắn rằng bạn đã nhận được số không âm; bạn đã có để đảm bảo rằng bạn đã nhận được số lượng chính xác ngày trong một tháng. Và làm thế nào bạn làm điều đó? Làm thế nào bạn sẽ làm điều đó kiểm tra? Điều đó đã yêu cầu bạn sử dụng? >> Do-trong khi các vòng. Do-trong khi các vòng, các loại của các vòng, quá, yeah. Vì vậy, hóa ra chúng ta không cần phải sử dụng một vòng lặp trong trường hợp này, khi chúng ta đang khiến cho một chuỗi, đó là loại tốt đẹp. Được rồi, di chuyển vào. Vì vậy, Stella. Bạn có thể cho chúng tôi biết một chút về những gì chúng ta nên làm gì tiếp theo? Vì vậy, bây giờ chúng tôi đã có các chuỗi, chúng tôi đã có nó được lưu trữ trong một biến; chúng ta cần gì để làm với chuỗi? >> Chúng ta cần - xác định 2 - Yeah, chỉ cần nói bằng tiếng Anh, đó là awesome. >> Xác định không nghe được] thủ đô - hoặc, chữ hoa. Yeah, vì vậy bạn xác định mà những người có chữ hoa và chữ thường. Chúng ta không thể thành chữ hoa thành chữ thường cho đến khi chúng ta đã xác định được những người thân mà. Vì vậy, chúng tôi sẽ đặt ở đây. Vì vậy, chỉ cần suy nghĩ về quá trình này, làm thế nào để chúng ta làm điều này xác định? Bạn có biết, Dan? Loại những gì chúng tôi - chúng tôi muốn có những công cụ để sử dụng trong các hộp công cụ của chúng ta? >> Tôi muốn đặt nó trong bằng cách nào đó trong giống như một mảng hoặc từng là hộp nhỏ riêng của nó, và sau đó chữ hoa từ đó hay không. Được rồi, do đó, một trong những công cụ chúng ta có thể sử dụng là một mảng. Chúng ta có gì để nhìn vào trong chuỗi, tuy nhiên, để tìm ra chúng tôi đã nhìn vào các nhân vật. >> Vì vậy, bạn đã có để nhìn vào chiều dài của chuỗi? Yeah, vì vậy một phần là nhận được độ dài của chuỗi. Chỉ cần ra khỏi tò mò, chúng tôi những gì sử dụng để có được chiều dài của một chuỗi? >> Strlen? Yeah, strlen, chúng tôi gọi đây là "strlen" Tất cả các chuỗi các chức năng này, do đó, strlen là một chức năng, và đó là siêu tiện dụng, bởi vì chúng ta có thể sử dụng nó để chỉ nói, Hey, strlen: Đây là một chuỗi, cho tôi biết độ dài của nó. Trong bài giảng hôm nay, David đã nói rất nhiều về việc làm thế nào strlen được thực hiện, những gì thực sự xảy ra đằng sau hậu trường. Nhưng điều này là một trong những tiện dụng rất siêu. Có những người khác cũng trong thư viện string, chẳng hạn như strcmp, được viết là "strcmp", được sử dụng để so sánh chuỗi với nhau. Những người khác, bạn sẽ sử dụng như strstr, đó là tốt cho việc tìm kiếm các chuỗi tiểu và do đó trên. Đối với hầu hết các phần, tất cả họ đều bắt đầu với str và sau đó là một cái gì đó khác. Lý do họ không thực sự chính tả chúng giống như một chuỗi và vv là bởi vì trở lại như những ngày đầu của C, khi mọi người lần đầu tiên được văn bản và tất cả những điều đó, họ có những hạn chế về số lượng ký tự mà bạn có thể sử dụng cho tên hàm và tên biến, do đó, tất cả mọi thứ là như Super ngưng tụ. Nhưng bất cứ lúc nào bạn nhìn thấy một cái gì đó bắt đầu với str, mà thường có nghĩa là điều này có gì để làm với một chuỗi. Được rồi, do đó, bạn đã có để có được chiều dài của chuỗi, và sau đó, chúng tôi làm gì với các ký tự? Bạn có biết, Sam? >> Tôi không có ý tưởng, tôi đã cố gắng để con nó ra. Tôi thật sự không biết - Tôi muốn có một số cách để Ý tôi là, tôi sẽ nghĩ rằng có lẽ chúng ta có thể làm một cái gì đó với tỷ lệ cược và làm mềm mại, nhưng tôi không biết của bất kỳ chức năng như thế. Yeah. >> Nhưng điều đó - nó sẽ không nhất thiết phải làm việc, bởi vì sau đó bạn sẽ nhận được không gian - bạn sẽ phải có không gian để có được lời khuyên về cách - Okay. >> Tôi không biết - tôi loại bị mất vào thời điểm này. Yeah - không, không, không, đây là điểm tốt. Vì vậy, những gì chúng ta cần làm là, như Sam nói, chúng ta cần phải theo dõi các chữ các chữ cái lẻ, và những người thân mà ngay cả các chữ cái. Nhưng chúng tôi muốn chắc chắn rằng chúng tôi không chỉ tìm kiếm tại số lẻ và chẵn chỉ số trong chuỗi, mà đúng hơn là nhìn vào các chữ số lẻ và chẵn trong chuỗi, kinda chúng ta cần phải có sự phân biệt giữa chữ cái - như những gì thực ra A, B, C, D, hoặc như vậy, và những gì không phải là thư nhưng vẫn còn trong chuỗi ký tự của chúng tôi. Ví dụ ở đây, giống như dấu chấm than này không phải là một lá thư, nhưng nó vẫn là một phần của chuỗi ký tự của chúng tôi, nó vẫn là một char. Tương tự như vậy, tất cả các không gian này - nó không có ý nghĩa để tận dụng một không gian, phải không? Vì vậy, chúng tôi muốn chắc chắn rằng bằng cách nào đó chúng ta bỏ qua những trong khi vẫn theo dõi tỷ lệ cược và làm mềm mại. Vì vậy, loại trong hộp công cụ lập trình của chúng tôi cho đến nay, nếu bạn sẽ, chúng tôi có một số công cụ khác nhau mà chúng tôi đã nói chuyện về. Vì vậy, một, ví dụ, là các biến, như chúng tôi đã nói chuyện về tại đây. Một công cụ mà chúng ta đã nói về chức năng. Vì vậy, chúng tôi đã nói chuyện về các biến trong giả của chúng tôi ở đây như những gì chúng ta sẽ sử dụng để lưu trữ chuỗi ký tự của chúng tôi. Chúng tôi đã nói chuyện về các chức năng để có được chiều dài của một chuỗi, như strlen. Chúng tôi đã nói về cái gì khác, và chúng tôi đã nói chuyện về nó cho rất nhiều trước đó trong phần hôm nay: vòng. Bạn nghĩ gì về việc sử dụng một vòng lặp trong chương trình này? Jared, bạn nghĩ sao? Chúng tôi sẽ sử dụng một vòng lặp trong chương trình này? >> Có lẽ là không, không, bởi vì bạn không phải đi qua nó nhiều hơn một lần. Được rồi, bạn không phải đi qua những gì nhiều hơn một lần? >> Toàn bộ chuỗi. Đúng, vì vậy bạn không phải đi qua toàn bộ chuỗi một lần. Xin lỗi vì đã thực hiện hoàn toàn không có ý nghĩa! Bạn không cần phải đi qua toàn bộ chuỗi nhiều hơn một lần. Okay. Bạn nghĩ gì? >> Tôi nghĩ rằng nó tốt hơn để sử dụng chúng vì vậy chúng tôi có thể làm như tận trong khi vị trí của nó là số [không nghe được. Tuyệt vời, và để tận dụng những gì? Được rồi, vì vậy chúng tôi đang nói rằng chúng ta nên sử dụng một vòng lặp vì chúng tôi muốn viết chữ hoa trong khi nó không phải là một số. Vì vậy, - xin lỗi, bạn muốn thêm? >> Tôi sẽ nói rằng cách bạn đối xử với các chuỗi và nó không nghe được] riêng [] không nghe được vào các nhân vật? Yeah. >> Và sau đó chúng ta có thể gán các con số để hoặc dựa trên vị trí của các ký tự trong chuỗi? Yeah. >> Và xác định cho dù đó là lẻ hoặc thậm chí và viết hoa chữ cái chính nó trong khi vị trí của bức thư là [không nghe được] - xin lỗi. Lớn. Vì vậy, chỉ cần một bản tóm tắt. Bạn có thể nhắc nhở tôi tên của bạn một lần nữa - Tôi xin lỗi. >> Charlotte. Charlotte, okay. Vì vậy, những gì Charlotte đang nói, đó là hoàn toàn đúng - chúa ơi, thích này để tự động thụt vào tôi - là nếu chúng ta nhìn vào một chuỗi như này ở đầu trang - "Cảm ơn vì thêm" - như là một chuỗi ký tự là ở vị trí 0, h là ở vị trí 1. A là 2, sau đó chúng tôi đã nhận 3, 4, 5; không gian là ở vị trí 6. Trong khi đó - vị trí của f là những gì? 7! O? 8. R? 9. Và sau đó chúng tôi đã có 10, và sau đó tôi có thể không thực sự viết nó mà không có nó kinda nhận được lộn xộn trên màn hình. Nhưng điều này thực sự là làm thế nào chúng ta có thể nói về chuỗi trong bộ nhớ. Nó một chuỗi là một dãy ký tự, và khi chúng ta nói đến một nhân vật cá nhân trong một chuỗi, chúng ta thường làm như vậy bằng cách đề cập đến vị trí của nhân vật đó trong chuỗi, có lẽ là cách mà chúng ta nói về tháng chín là tháng thứ chín của năm hoặc thứ hai là ngày đầu tiên của tuần. Vì vậy, điều này cung cấp cho chúng ta một cách để tìm ra mà những người có số lẻ so với ngay cả vì bạn có thể thấy ở đây, nếu chúng ta kết hợp nó với T này, bạn có thể thấy tất cả những cái hoa thậm chí vị trí, ít nhất là từ đầu tiên, và sau đó mọi thứ được ném một khi chúng ta nhấn không gian, bởi vì chúng tôi không được tính không gian này như một lá thư, do đó, nó như thể chúng tôi bắt đầu và đi 0, 1, 2, 3, 4, 5, không gian, 6, 7, 8, không gian, 9, và sau đó 10, 11, 12, và như vậy. Cool, vì vậy chúng tôi chắc chắn sẽ muốn sử dụng một số loại vòng đi qua mỗi nhân vật lần lượt. Vì vậy, tại thời điểm này, chúng tôi sẽ trở lại với giả cũ của chúng tôi ở đây. Là một phần xác định của những người thân mà hoa và những người thân mà là chữ thường, chúng tôi sẽ muốn làm điều này trong một số loại vòng lặp. Loop, ruột kết. Những loại vòng lặp, trong các loại của các vòng mà chúng ta có, có vẻ là một tốt để sử dụng trong trường hợp này? >> Tôi đã suy nghĩ cho vòng lặp. Và tại sao bạn nghĩ đến việc cho vòng lặp? >> Bởi vì nó bắt đầu từ số không, và sau đó khi chúng ta đạt đến chiều dài của chuỗi, và sau đó mỗi lần lặp bạn có thể không nghe được, không? Yeah, chính xác. Vì vậy, trong số các lựa chọn khác nhau của các vòng, chúng tôi có cho các vòng, trong khi các vòng, và làm trong khi các vòng. Trường hợp cho vòng lặp là đặc biệt hữu ích là khi bạn muốn biết loại nơi bạn đang ở trong vòng lặp, bao nhiêu lần vòng lặp đã được thực hiện cho đến nay. Đó là chính xác những gì chúng tôi muốn biết trong tình huống này, như Kelly cho biết, dựa trên bình luận trước đó của Charlotte mà chúng ta muốn biết vị trí của các ký tự trong chuỗi, và cho vòng lặp sẽ cho chúng ta điều đó, bởi vì nếu chúng ta bắt đầu nhìn lại chuỗi ký tự của chúng tôi, nếu chúng ta bắt đầu vòng lặp cho chúng tôi tại 0, và chúng tôi đi qua chiều dài của toàn bộ chuỗi, sau đó chúng ta có thể kết hợp chữ T với 0 trong của chúng tôi cho vòng lặp, chữ H với 1 trong vòng lặp của chúng tôi, và như vậy, đi tất cả các cách thức thông qua vào cuối của chuỗi. Vì vậy, chúng ta hãy bắt đầu mã hóa này chỉ là một chút chỉ để bạn có được một cảm giác về này trông giống như. Tôi sẽ tiết kiệm này, vì vậy chúng tôi đã có mã giả của chúng tôi ở đây, và tôi sẽ để xóa tất cả mọi thứ. Vì vậy, tôi có một phiến đá trắng. Tôi sẽ bắt đầu bằng cách viết int main (void) { Tôi sẽ đặt số 0 trở lại trong và sau đó. Vì vậy, thường là khi tôi bắt đầu chương trình, đây là những gì tôi bắt đầu với. Tôi sẽ lưu nó để bạn có nó. Vì vậy, một trong những điều đầu tiên chúng tôi nói chuyện về đầu vào từ người sử dụng và lưu trữ nó trong một chuỗi. Làm thế nào để chúng ta có được đầu vào từ người sử dụng? >> GetString. GetString, tất cả các quyền. Vì vậy, nếu tôi gõ getString () và một dấu chấm phẩy. Hãy thử chạy này này sẽ chạy, trước hết? Và tại sao không chạy? >> Bạn phải khai báo biến. Tôi phải khai báo một biến. Okay. Vì vậy, làm thế nào để làm điều đó? Bạn có viết một cái gì đó, chia sẻ nó? Và sau đó chúng ta có thể kéo nó lên. Hãy xem, Dan, phải, okay. Hoặc Daniel. Sao chép rằng, chuỗi đầu vào = GetString (). Awesome. Điều này sẽ chạy? Hãy thử lại nó. Lượt tải lên chạy, mã nguồn, xây dựng, đã có lỗi. Okay. Vì vậy, whats xảy ra ở đây? Sử dụng không khai báo định danh 'string'. >> Chúng tôi phải bao gồm các thư viện? Yeah, Dan nói rằng chúng ta phải bao gồm các thư viện. Có phải đó là những gì bạn đang nói, Stella? Awesome. Đó là tuyệt vời, do đó, Stella, bạn có thể sao chép mã này trong Space Daniel? Nếu bạn bấm vào Daniel Roland Ki, sao chép, và sau đó bạn sẽ đặt bao gồm dòng, và sau đó lưu nó ra? Hãy cho tôi biết khi bạn đã sẵn sàng. Vì vậy, bao gồm cú pháp này cũng là loại của funky; có như thế tag băm, và có bao gồm, và sau đó, có các dấu ngoặc nhọn. Bạn có nhớ cách làm việc này, hay tôi nên đặt nó lên trên mã này ngay tại đây? >> Tôi là tốt. Okay. >> Tôi in nó - Tôi đã không chắc chắn mà thư viện, mặc dù. Oh, okay - yeah, do đó, nó là thư viện CS50. >> Oh, tôi đặt thư viện stdio. Oh, đã nhận nó - yeah, không, Đó - do đó, nó chỉ ra rằng chuỗi thực sự là một cái gì đó đặc biệt để CS50. Có thực sự không phải là một loại dây thực sự bởi vì ngay tại đây, chuỗi ở vị trí kiểu, chúng ta đang tuyên bố một đầu vào được gọi là biến kiểu string - và chúng tôi đang đặt bên trong của đầu vào giá trị được trả lại cho chúng tôi: sản lượng của cuộc gọi chức năng này GetString. Bạn có thể nói đây là một cuộc gọi chức năng vì nó có các dấu ngoặc đơn, giống như printf không, cũng giống như strlen. Nhưng chuỗi thực sự là không phải là một loại thực trong ngôn ngữ C. Chúng tôi đã thực hiện nó vào một loại, và chúng tôi sẽ giới thiệu cho những gì nó thực sự là trong C, bởi vì đó là một cách để làm việc với chuỗi; chúng tôi đã chỉ làm một cái gì đó để làm cho nó trông một chút đẹp hơn. Vì vậy, ở đây chúng tôi đi. Dưới đây là mã của Stella. Nó có bao gồm # . Những người khác sẽ gọi đây là giống như băm một, hoặc một sắc nét bao gồm. Bây giờ chúng ta có thể bắt đầu nó, chạy nó, và chúng tôi vẫn nhận được một lỗi. Hãy xem những gì đang xảy ra. "Không được sử dụng biến 'đầu vào'." Được rồi, vì vậy đó là mát mẻ, đó là mát mẻ. Ý tôi là, nó không phải là thực sự mát mẻ, bởi vì chúng tôi nhận được một lỗi và nó không chạy, nhưng những gì nói là chúng tôi đã không sử dụng biến của chúng tôi, có ý nghĩa. Chúng tôi đã không cố gắng làm bất cứ điều gì với nó. Đây là một cách mà Clang đang cố gắng để giúp chúng tôi đảm bảo rằng chúng tôi không chỉ sử dụng các biến và sau đó vô tình gọi điện cho họ một cái gì đó khác sau này trong mã của chúng tôi, giúp chúng tôi tránh những sai sót như vậy. Được rồi, vì vậy chúng tôi đã có đầu vào từ người sử dụng, chúng tôi lưu trữ nó trong một biến. Bước tiếp theo là để sau đó bắt đầu tìm kiếm ở tất cả các ký tự trong chuỗi và xác định mà những người được viết hoa và những người thân mà là chữ thường. Và cũng giống như Kelly và Charlotte đưa lên, chúng tôi điều này bằng cách sử dụng một vòng lặp for. Vì vậy, không ai nhớ cú pháp của một vòng lặp for và muốn để mất một đâm lúc chỉ cần viết dòng đầu tiên cho vòng lặp, chỉ cần cho một chút? Kelly, bạn muốn cung cấp cho nó một thử? >> Yeah, vì vậy bạn phải khởi tạo đầu tiên, vì vậy tôi đặt i = 0, và sau đó tôi đã làm i > Vâng, tôi hơi say lên một chút, nhưng yeah. Được rồi, chúng ta hãy kéo nó lên. Awesome. >> Nhưng sau đó, tôi không biết nếu có - Yeah, okay. Vì vậy, đây là những gì của Kelly: chúng ta hãy nhìn vào nó một cách nhanh chóng. Vì vậy, cô ấy bao gồm thư viện CS50 ở đầu trang. Cô ấy bao gồm các thư viện IO tiêu chuẩn ở đầu trang, và IO tiêu chuẩn có chức năng giống như printf, vì vậy nếu bạn đã bao giờ muốn sử dụng printf, bạn cần dòng đó. Và sau đó cô bao gồm thư viện string, mà chúng tôi sẽ cần, bởi vì thư viện string có strlen chức năng, mà chúng tôi sẽ nhận được chỉ là một chút. Vì vậy, nếu chúng ta nhìn vào những gì Kelly được thực hiện ở đây, bạn có thể hướng dẫn chúng tôi qua những gì bạn đã làm? >> Yeah, vì vậy - Ý tôi là, tôi đã nhận lỗi, vì vậy - Yeah, không, it's - >> Vì vậy, tôi muốn gọi cho chuỗi mà tôi có chỉ là "chuỗi". Tôi muốn in ra các chuỗi và sau đó tôi - Tôi muốn thiết lập các chuỗi như một mảng của mỗi nhân vật sự khác biệt [không nghe được, phải không? Và sau đó tôi muốn bắt đầu ở vị trí 0 và sau đó mỗi 2 không gian, Tôi sẽ tận dụng, vì vậy tôi chỉ mô tả nó là 23, bởi vì tôi đã nhìn vào bảng mã ASCII. Vì vậy, đó là những gì tôi đã suy nghĩ - Tôi biết nó không đúng. Đã nhận nó, vì vậy đây là một khởi đầu tuyệt vời. Tôi nghĩ rằng rất nhiều khuôn khổ diễn ra ở đây. Hãy cho đi qua loại từng dòng và xem những gì đang xảy ra. Vì vậy, cách tôi muốn làm điều này chỉ cần bắt đầu bằng cách biên dịch mã và cho phép trình biên dịch cho tôi biết như thế có gì sai với mã của tôi, bởi vì trình biên dịch là thực sự tốt tại nói cho bạn những gì là sai với mã của bạn. Vì vậy, nếu chúng tôi chơi nó, xây dựng, và nó không xây dựng. Nó nói có một lỗi, vì vậy nếu chúng ta di chuyển xuống và nhìn vào các lỗi đầu tiên, nó nói - chúng tôi di chuyển trở lại lên đến đỉnh, chúng ta có thể thấy có 5 lỗi phát sinh ở đây ở phía dưới. Rất tiếc, đó là thực sự cắt đứt. Tôi đoán đó là chỉ cần sẽ không nhận được bất kỳ. Ở đây chúng tôi đi. Vì vậy, có 5 lỗi tổng số. Ở đây tôi chỉ có thể nhìn thấy đầu tiên 2, vì vậy tôi có thể di chuyển lên một chút và sau đó lên di chuyển. Đây là các lệnh được chạy để biên dịch mã, và sau đó các lỗi đầu tiên là trong file.c ngay tại đây: "Dự kiến ​​sẽ xác định hoặc '('", và nó đã được trên đường dây này nơi mà chúng tôi đã nói string = GetString (). Bạn có thể thấy ở đây là nó đã được trên dòng 8 của file.c, và sau đó tôi tin rằng đây là 12 nhân vật - đó là lỗi. Vì vậy, những gì đang xảy ra sai trên dòng 8 - Kelly? >> Bạn chỉ cần để gọi nó, như một lá thư hoặc một cái gì đó, giống như một chuỗi hoặc một cái gì đó? Yeah, vì vậy nó chỉ ra rằng các loại tên đặc biệt, để string, int, char, ngắn, họ tất cả từ khoá đặc biệt, và bạn có thể không thực sự sử dụng chúng như là tên các biến của bạn, bởi vì trình biên dịch nhìn vào đó và nói, "Ồ, tôi biết đó là một loại" vì vậy bạn có thể không thực sự có một biến xâu chuỗi, như tôi đang cố gắng để làm ở đây, điều này sẽ không làm việc. Nhưng thay vào đó, chúng ta có thể gọi nó là một cái gì đó giống như hoặc st hoặc str. Chúng tôi cũng không thể gọi nó int. Chúng ta không thể có một chuỗi được gọi là int. Chúng ta không thể có một chuỗi được gọi là char, không ai trong số những người sẽ làm việc. Vì vậy, chúng tôi sẽ gọi nó là cho thời gian được. Awesome. Vì vậy, những gì tiếp theo đang diễn ra trong dòng này? String - dòng này có vẻ khá tốt? Hãy cung cấp cho nó một thử, chúng ta hãy chạy nó. Được rồi, do đó, chúng tôi vẫn nhận được lỗi. Lần này, chúng tôi đang xuống đến 4 lỗi. Vì vậy, chúng tôi đã nhận một trong số họ. Hãy di chuyển lên. "Loại không mong muốn tên chuỗi ': dự kiến ​​biểu hiện" có? >> Yeah, đó là vì tôi đã cố gắng để đặt tên cho chuỗi. Yeah, vì vậy nó trông giống như chúng tôi bây giờ cũng phải đi sửa chữa tất cả các tài liệu tham khảo cho chuỗi. Bạn có thể thấy có một tham chiếu đến chuỗi ở đây, ở đây, ở đây, vì vậy chúng ta có thể di chuyển tất cả các s. Lớn. Được rồi, chạy lại nó. Building - một lỗi khác xảy ra. Được rồi, bây giờ chúng giảm xuống còn một lỗi, để int i = s và sau đó các dấu ngoặc vuông. Vì vậy, bạn có thể cho chúng tôi biết một chút về những gì bạn đang làm gì ở đây, Kelly? >>. Nó đã được trên dòng 10. >> Tôi không biết nếu chúng tôi cần tất cả, nhưng tôi nghĩ rằng tôi đã cố gắng - Tôi sẽ lưu nó để bạn có thể làm theo cùng. >> Tôi nghĩ rằng tôi đã cố gắng để cho nó bắt đầu ở vị trí 0 vào lúc bắt đầu cho vòng lặp, vì vậy tôi nghĩ rằng có lẽ đó nói là không cần thiết. Vì vậy, chỉ cần để recap, bạn đang nói rằng điều này - bạn đã cố gắng để bắt đầu ở vị trí 0 và có được điều này - yeah, vì vậy tôi nghĩ rằng trước đó, cũng vậy, khi bạn đang đi bộ qua mã, bạn đang nói về việc làm thế nào bạn muốn để điều trị các chuỗi như là một mảng vì vậy chúng ta có thể truy cập vào từng nhân vật riêng lẻ. Tôi nghĩ rằng Dan mảng đề cập, cũng cố gắng để chuyển đổi các chuỗi vào mảng. Nó quay ra rằng loại dưới mui xe, một chuỗi thực sự được lưu trữ như là một mảng đã có, và bạn có thể truy cập vào nó như một mảng; không có chuyển đổi mà bạn phải làm. Một isn't chuỗi - vì vậy - một chuỗi không phải là thực sự là một mảng, nhưng bạn có thể truy cập vào nó như vậy, bởi vì tất cả các nhân vật được lưu trữ ngay bên cạnh nhau trong bộ nhớ, vì vậy nếu bạn muốn để có được những ký tự đầu tiên của chuỗi, nó giống như nhận được số nguyên đầu tiên trong một mảng số nguyên. Vì vậy, chúng tôi thường xuyên - we'll tham khảo với 2 giống như oh, là một chuỗi, là một mảng, mặc dù nó thực sự - họ việc rất khác nhau, nhưng bạn có thể đối xử với họ rất nhiều giống. Vì vậy, nó chỉ ra rằng dòng này thực sự - chúng tôi không cần phải làm bất kỳ chuyển đổi, và trong thực tế, điều này thực sự không phải là một biểu thức hợp lệ, đó là những gì trình biên dịch của chúng tôi nói với chúng tôi. Nó nói rằng, "Hey, dự kiến ​​một biểu thức, và những gì tôi đã có ở đây là một cái gì đó không phải là một biểu thức. " Để khai báo một mảng, tất cả những gì bạn cần làm là một cái gì đó như thế này với một dấu chấm phẩy, và sau đó bạn nói với các mảng bao lâu bạn muốn nó được, chẳng hạn như 5, do đó, dòng 10 này sẽ khai báo một mảng gọi là i với 5 số nguyên trong đó. Đây là một sang một bên, điều này là không cần thiết cho các mã, nhưng điều này - đây là loại khai báo như thế nào. >> Làm thế nào bạn sẽ không sử dụng char [strlen (s)]? Char [strlen (s)]? >> Char i, và sau đó bên trong dấu ngoặc, strlen (s). Yeah, vì vậy chúng tôi có thể - chúng ta có thể làm điều này, và điều này sẽ tuyên bố này sẽ làm gì? >> Tôi nghĩ rằng nó sẽ khai báo một mảng , giống như - of - oh, bạn không cần i-oh, yeah, bạn chắc chắn không cần tôi. Bạn khai báo một mảng kí tự chiều dài s. Và vì vậy những gì Sam nói là 10 dòng này - cho phép tôi đặt một số không gian giữa nó và phần còn lại để chúng ta có thể cô lập nó - dòng 10 này sẽ khai báo một mảng ký tự, strlen (s) giá trị của họ, nhưng chúng tôi thực sự cần tôi, và lý do chúng tôi cần là bởi vì chúng ta cần phải cung cấp cho các mảng một tên; nếu không, chúng ta sẽ không có một cách để đề cập đến mảng sau này trong mã. Vì vậy, điều này đúng ở đây là tên mảng và bên trong là độ dài. Điều này sẽ cho chúng ta một mảng, nhưng điều này - một lần nữa, đây là một tuyên bố. Nó không phải là một nhiệm vụ, đó không phải là khởi tạo. Nếu chúng ta khai báo mảng này như thế này, có thực sự là không có gì trong các nội dung của mảng. Nó chỉ là rác - bất cứ điều gì là ở đó. Và cũng giống như chúng tôi đã nói, chúng tôi thực sự thậm chí không cần phải làm điều này chuyển đổi, bởi vì chúng tôi đã có thể điều trị string s như một mảng. Tôi biết chúng tôi đang chạy một chút dài về thời gian, nhưng tôi muốn chỉ thực sự nhanh chóng có được điều này cho vòng lặp và cho bạn thấy làm thế nào để truy cập vào các đặc điểm cá nhân trong mảng, bởi vì đó là chìa khóa để chuyển nhượng của chúng tôi. Và sau đó chúng tôi sẽ cho bạn đi từ đó. Vì vậy, ở đây, chúng tôi đã có một vòng lặp for trông gần như tốt. Có gì không phải là khá gần như ở đó? What's - điều gì là không hoàn toàn đúng về điều này cho vòng lặp? >> Không có dấu ngoặc nhọn? Không có dấu ngoặc nhọn, đối với một. Bạn muốn làm cho chắc chắn rằng chúng tôi có cơ thể của vòng lặp với dấu ngoặc nhọn. Rất tiếc, không phải cú đúp vuông! Và điều tiếp theo mà chúng ta cần phải làm gì với vòng lặp này là gì? Nếu tôi cố gắng và chạy nó, Hãy lỗi này mà tôi nhận được? Tôi nhận được tất cả các lỗi - tôi phải khởi tạo i. Lớn. Vì vậy, đây sẽ là một vòng lặp - điều này không phải là khá, nhưng nó nhận được thực sự gần gũi. Mã này bây giờ chúng ta có thể chạy, xây dựng, lỗi vẫn xảy ra. Tại sao nó vẫn còn phàn nàn, nói rằng các biểu hiện là không sử dụng, và đó là bởi vì dòng này không làm bất cứ điều gì. Chúng tôi không lưu trữ bất cứ nơi nào, chúng tôi đã không lưu kết quả. Chúng ta nên lưu kết quả này? >> S hoặc i? Chính xác, và cú pháp này funky, s với các dấu ngoặc vuông có nghĩa là truy cập vào các ký tự thứ i của s. Đó sẽ là một cái gì đó là thực sự quan trọng trong việc chuyển nhượng. Thật không may, chúng ta sẽ phải dừng lại ở đây, để Sebastian phần có thể đến trong, nhưng tôi hạnh phúc khi ở lại sau bên ngoài và sẽ có bất cứ câu hỏi nào. Vì vậy, cảm ơn các bạn đã đến đây. Điều này bây giờ nên tải, xây dựng, chạy. Chúng ta có thể nhập vào một chuỗi như "hello" và nó in "QOX". [Cười] Vì vậy, không khá có, nhưng di chuyển, nhận được đối với những vòng! Cảm ơn vì đã đến, và tôi sẽ được ở bên ngoài.