Xin chào và chào mừng.
Trong bài giảng này, tôi muốn nói về đọc đầu vào từ bàn phím.
Đây là một khái niệm cơ bản mà tôi muốn các
bạn học sớm vì nó rất có giá trị và rất nhiều chương trình lấy đầu vào.
Vì vậy, tôi đã cung cấp điều này sớm.
Một số khái niệm không sẽ hoàn toàn rõ ràng.
Nhưng chắc chắn chúng ta sẽ học những các khái niệm trong các phần khác khi chúng
ta xem qua, nhưng điều quan trọng là tìm hiểu điều này rất sớm và
nó rất giống với hàm printf.
Vì vậy, chúng tôi đã thảo luận về đầu ra.
Chúng tôi biết cách định dạng xuất bằng printf.
Bây giờ chúng ta phải học một chút về đầu vào, về cơ bản
nhận đầu vào từ người dùng.
Rất hữu ích khi hỏi người dùng để nhập dữ liệu vào một chương trình.
Chúng ta đã nói về dòng lệnh các đối số nhập dữ liệu thông qua cách đó, đó
là một cách để làm điều đó.
Một cách khác là hỏi người dùng trực tiếp để họ có thể nhập nội dung
nào đó vào bàn phím.
Vì vậy, bạn nhận được thông tin đầu vào từ bàn phím, nhưng nó được hiển thị, bạn
nhập đầu vào thông qua thiết bị đầu cuối bảng điều khiển.
Đó là cách bạn nhập đầu vào.
Thư viện c chứa một số chức năng đầu vào.
Chúng tôi sẽ sử dụng scanf.
Đó là chức năng chung nhất.
Nó rất hữu ích.
Nó cung cấp khác nhau định dạng mà bạn có thể nhập.
Vì vậy, bạn có thể nhập văn bản và sau đó nó sẽ được chuyển đổi sang các định dạng khác nhau.
Vì vậy, scanf đọc đầu vào từ luồng đầu vào tiêu chuẩn, đó là stdin.
Scanf thực sự có thể được sử dụng cho đọc từ các tệp cũng như nếu luồng
đầu vào là một tệp.
Nhưng chúng tôi sẽ không lo lắng về bất kỳ
điều gì trong số đó bây giờ, chúng tôi sẽ sử dụng nó để đọc đầu vào từ bàn phím.
Được rồi, và hãy ghi lại bằng mặc định là bàn phím.
Stdin là một dòng suối.
Luồng và c, ba của các luồng khác nhau.
Dòng lỗi, tiêu chuẩn trong và đầu ra tiêu chuẩn.
Tiêu chuẩn theo mặc định là bàn phím.
Vì vậy, chúng tôi sẽ giữ nó theo cách đó.
Và sử dụng scanf, nó sẽ đọc từ tiêu chuẩn trong và sau đó dựa trên những gì
bạn nhập hoặc cách bạn muốn lưu trữ dữ liệu, tôi
nên nói, nó sẽ chuyển đổi những gì bạn đã nhập bởi vì những
gì bạn nhập sẽ là văn bản.
Nó sẽ chuyển đổi văn bản đó thành định dạng mà bạn đã cung cấp.
Nó sẽ sử dụng các chỉ định định dạng giống như hàm printf.
Vì vậy, định dạng có thể là một chuỗi ký tự, được gọi là một chuỗi.
Chúng tôi chưa nghiên cứu điều đó trong rất nhiều chi tiết được nêu ra.
Nhưng một lần nữa, chúng tôi sẽ chúng ta nói về các kiểu dữ liệu.
Và sau đó bạn cũng có thể chỉ định các loại dữ liệu khác mà chúng
ta sẽ nói đến, chẳng hạn như số nguyên, số về cơ bản.
Vì vậy, bạn có thể đọc số.
Bạn có thể đọc các chuỗi.
Bạn có thể đọc các số có chứa số thập phân, các ký tự riêng lẻ,
tất cả những thứ tốt đẹp này.
Nếu tiêu chuẩn trong được nhập từ bàn phím được mặc định là những gì sẽ xảy
ra khi bạn nhập văn bản thông qua bàn phím, nó sẽ lấy văn
bản đó, đưa nó vào chương trình c và nó sẽ chuyển đổi văn bản đó.
Và văn bản là những thứ như chữ cái, chữ số và dấu chấm câu.
Vì vậy, mặc dù bạn đang nhập một số, nó vẫn là văn bản vì
nó đến từ bàn phím.
Vì vậy, nếu bạn nhập số nguyên 2014, là một con số và về cơ bản những gì đang xảy ra là bạn
đang nhập ký tự hai không một và bốn.
Và những gì đang xảy ra và những gì sẽ xảy ra là nó sẽ thêm
gửi đầu vào đó vào chương trình c.
Và nếu bạn muốn lưu trữ dữ liệu đó dưới dạng một số, thì bạn sẽ
phải chuyển đổi dữ liệu đó.
Và vì vậy bạn phải chỉ định định dạng chỉ định cách bạn muốn chuyển đổi nó,
giống như bạn làm trên printf.
Nhớ like với printf mà bạn sử dụng phần trăm d để in ra một số nguyên.
Bạn sẽ chuyển đổi văn bản thành một số nguyên sử dụng phần trăm d cũng
như cho scanf nếu bạn muốn chuyển đổi chuỗi thành một số.
Và đó là những gì chúng tôi sẽ để làm những điều cơ bản từ sớm.
Chúng tôi sẽ chỉ sử dụng các con số bởi
vì chúng tôi biết những con số cho đến nay, và chúng tôi chưa thực sự đã học về chuỗi.
Vì vậy, chúng tôi chủ yếu sẽ sử dụng số khi chúng tôi nhập liệu.
Vì vậy, scanf.
Nó rất giống với printf.
Nhưng thay vào đó, nó có một chút khác biệt trong các đối số nhất định mà nó cần.
Nó vẫn sử dụng một chuỗi điều khiển theo sau là danh sách các đối số.
Vì vậy, sẽ có một cái gì đó trong dấu ngoặc kép đó.
Dấu ngoặc kép thường sẽ chỉ chứa một thứ và nó sẽ
là định dạng.
Bạn sẽ chuyển đổi dữ liệu như thế nào.
Vì vậy, chuỗi điều khiển chỉ ra các kiểu dữ liệu đích cho luồng
ký tự đầu vào.
Đó là thông số định dạng, phần trăm d, phần trăm c, phần trăm s, phần
trăm f đối với dòng chảy, v.v.
Hàm printf sử dụng biến tên, hằng số và biểu thức trong các đối số của nó
bởi vì chúng ta học được điều đó.
Bạn có một cái gì đó trong dấu ngoặc kép.
Và sau đó bên trong đôi dấu ngoặc kép, bạn sử dụng công cụ định dạng.
Và sau dấu phẩy, bạn có thể in ra các biến hoặc thậm chí bạn có
thể in ra các biểu thức.
Biểu thức, chúng ta sẽ nói về chi tiết hơn, một cái gì đó về
cơ bản trả về một giá trị.
Loại biểu thức phổ biến nhất là một biểu thức số học.
Chức năng scanf là khác nhau bởi vì thay vì
thực sự hiển thị các biến, nó sẽ sử dụng các biến được trỏ tới.
Nhưng may mắn là con trỏ là một khái niệm lớn trong c.
Bạn không cần phải biết bất cứ điều gì về con trỏ để hiểu
và sử dụng hàm scanf.
Vì vậy, đừng lo lắng về điều đó.
Được rồi, tất cả những gì bạn phải làm là bạn phải nhớ ba quy
tắc về hàm scanf để sử dụng nó.
Nó sẽ trả về số các mục mà nó đọc thành công.
Vì vậy, nếu nó đọc một biến, hai biến, ba biến, nó sẽ trả về
điều đó.
Nếu bạn sử dụng scanf để đọc một giá trị đối với một
trong những loại biến cơ bản mà chúng ta sẽ thảo luận, chẳng hạn như như int, float, double, thì tất
cả những gì bạn phải làm là tên biến, đối số phải được đặt
trước bằng dấu và.
Bạn thậm chí không cần biết tại sao đó là ngay bây giờ nhưng
chỉ cần làm điều đó, bất kỳ kiểu dữ liệu cơ bản nào.
Ký hiệu và là địa chỉ.
Và bởi vì scanf nhận một con trỏ bạn phải hủy tham chiếu, bạn phải
chuyển địa chỉ vào.
Điều thứ ba mà bạn phải nhớ cho scanf.
Nếu bạn sử dụng scanf để đọc chuỗi là một chuỗi các ký tự
thành một ký tự, bạn không cần phải sử dụng dấu và.
Vì vậy, về cơ bản scanf mất hai đối số mà tôi sẽ cho
bạn xem một ví dụ.
Đối số đầu tiên sẽ là làm thế nào để chuyển đổi dữ liệu bạn nhập vào.
Và nếu bạn lưu trữ dữ liệu đó trong int, bạn sử dụng phần trăm sử
dụng định dạng định dạng phần trăm d.
Nếu bạn muốn lưu trữ trong chuỗi mà chúng tôi chưa tìm hiểu về nó,
bạn sử dụng phần trăm s.
Và sau đó đối số thứ hai là và nó có thể là nhiều
đối số tùy thuộc vào số lượng định dạng bạn sử dụng bởi vì giống như
printf sẽ là biến thực tế, tên biến.
Và nếu biến là tất cả mọi thứ nhưng một chuỗi, bạn chỉ cần sử dụng ký hiệu và.
Nếu không, bạn không sử dụng dấu và.
Hàm Scanf cũng sử dụng khoảng trắng để quyết định cách phân chia đầu vào
thành các trường riêng biệt.
Và khoảng trắng bao gồm dòng, tab và dấu cách mới.
Và một lần nữa, tôi sẽ đi qua một ví dụ để cho bạn
thấy điều đó có nghĩa là gì vì cũng giống như printf có thể hiển thị nhiều,
nhiều biến tùy thuộc vào số lượng định dạng bạn có bên trong dấu ngoặc kép, điều tương tự với scanf.
Nếu scanf có nhiều thứ bên trong dấu ngoặc kép, nó
sẽ đọc nhiều đầu vào.
Và các đầu vào sẽ được chia theo dòng mới.
Vì vậy, một lần nữa, nếu bạn muốn thử để hiểu scanf là
gì, nó ngược lại với printf.
Printf sẽ chuyển đổi số nguyên, số dấu phẩy động, chuỗi ký tự, tất cả các dữ
liệu khác nhau này và nó sẽ chuyển nó
thành văn bản để bạn có thể thấy nó xuất ra.
Và nó sẽ hiển thị trên màn hình.
Scanf thì ngược lại.
Nó sẽ được coi là đầu vào văn bản và chuyển đổi nó thành bất kỳ kiểu dữ liệu
nào khác nhau như ints, float và double.
Vì vậy, chúng ta hãy xem xét một ví dụ.
Đây là một ví dụ về một chương trình đơn giản của chúng tôi.
Chúng tôi biết thói quen chính là gì.
Chúng tôi biết chỉ thị bao gồm là gì.
Chúng tôi chưa tìm hiểu về ký tự và số nguyên.
Nhưng về cơ bản, ở đầu hàm chính, chúng tôi đang tạo hai
biến vì chúng tôi cần lưu trữ dữ liệu và chúng ta sẽ nói về
các biến một cách chi tiết hơn.
Nhưng cũng giống như hàm printf, một lần nữa, bạn đang làm ngược lại.
Vì vậy, ở đây chúng tôi đang hiển thị đầu ra cho màn hình cho biết nhập một giá trị.
Scanf bên trong đôi dấu ngoặc kép có mã định dạng để
đọc trong đầu vào.
Và vì vậy bạn phải chỉ định dữ liệu sẽ được đọc, ở
đây nó nói là phần trăm s, phần trăm d.
Điều đó có nghĩa là chúng ta đang đọc trong một chuỗi, sau đó chúng tôi đang đọc trong một int.
Và bạn sẽ nhận thấy rằng chuỗi không có dấu và và scanf sau
dấu phẩy đầu tiên.
Và sau dấu phẩy thứ hai, chúng ta có một dấu và vì đó là một số nguyên.
Chúng tôi đang đọc một số.
Và sau đó printf đang hiển thị đầu ra.
Vì vậy, nó nói rằng bạn đã nhập vào chuỗi trong số nguyên này, giống như chúng
ta biết printf làm gì và sau đó hàm main trả về giá trị không.
Được rồi, chúng ta hãy xem xét vấn đề này ví dụ trong một giây trong các khối mã.
Nhưng chúng ta hãy chỉ nhắc lại một vài khái niệm.
Khi một chương trình sử dụng scanf để thu thập thông tin đầu vào từ bàn phím, nó
sẽ đợi bạn nhập một số văn bản.
Vì vậy, chương trình thực sự sẽ để tạm dừng cho đến khi bạn nhập dữ liệu.
Và sau đó khi bạn nhập một số văn bản.
Và nếu bạn nhập một số khoảng trắng, nếu bạn đang nhập nhiều thứ, thì
chương trình sẽ tiếp tục và đọc thông tin đầu vào sau khi bạn
thực sự nhấn nút enter.
Bạn phải nhấn nút enter.
Một lần nữa, scanf mong đợi đầu vào trong chính xác cùng định dạng mà bạn đã cung cấp.
Vì vậy, nếu bạn nói phần trăm s và phần trăm e, điều đó có nghĩa
là bạn phải cung cấp một chuỗi theo sau bởi một khoảng trắng, bất kỳ số lượng
khoảng trắng nào theo sau bởi một số nguyên, một số và một từ.
Chuỗi là một số nguyên từ là một số.
Vì vậy, chúng ta hãy đi qua ví dụ này từng dòng trong các khối mã.
Được rồi, vậy chúng ta có chức năng chính của chúng tôi.
Và một lần nữa, điều quan trọng là phải có thể nhập dữ liệu vào một chương trình.
Vì vậy, giống như printf, nó sẽ rất giống nhau, và chúng ta không cần phải
hiểu tất cả mã này.
Và chúng tôi thậm chí còn loại bỏ tham số đang được
truyền, chức năng chính đơn giản.
Chúng ta không cần phải hiểu tất cả mã này.
Chúng tôi thậm chí không cần phải hiểu những biến nào là tại thời điểm này.
Nhưng các biến sẽ lưu trữ dữ liệu.
Trong ví dụ, chúng tôi đang tạo một mảng chuỗi 100 và với dấu chấm phẩy và sau đó chúng ta
cũng sẽ chỉ tạo một số
nguyên, giống như trong printf.
Chúng tôi có một số nguyên, nhưng chúng tôi đang sử dụng một chuỗi.
Tôi chỉ muốn chứng minh đầu vào khác nhau.
Sau đó, thường là bất cứ khi nào trước khi bạn gọi hàm scanf để nhận đầu vào từ bàn
phím, bạn luôn sẽ nói với người dùng điều gì đó.
Bạn muốn cho họ biết những gì cần nhập.
Vì vậy, printf, hãy nhớ, hiển thị dữ liệu ra màn hình.
Chúng tôi chỉ nói nhập một giá trị.
Và họ sẽ thực sự nhập một cặp và sau đó chúng tôi kết thúc nó bằng
dấu chấm phẩy.
Chúng ta phải nói với người dùng để nhập một cái gì đó.
Bây giờ đây là nơi chúng tôi sử dụng chức năng scanf.
Chúng tôi nói scanf và sau đó bên trong dấu ngoặc đơn, đối số đầu tiên bên trong
dấu ngoặc kép sẽ diễn ra là dữ liệu mà chúng ta sẽ đọc.
Vì vậy, trong ví dụ này, chúng ta hãy nói rằng chúng ta sẽ chỉ
đọc một phần trăm đầu vào d là một số nguyên.
Và sau đó chúng ta sẽ lưu trữ dữ liệu đó trong một biến
vì chúng tôi muốn xem xét nó.
Và nó sẽ là tôi.
Bây giờ chúng ta phải chỉ định ký hiệu và trước đó bởi vì, hãy nhớ, mẹo nhỏ
này với con trỏ.
Bạn không cần phải biết tại sao, nó chỉ là địa chỉ.
Vì vậy, scanf, trên dòng 17, sẽ thực sự đọc dữ liệu từ bàn phím cho đến
khi người dùng nhấn nút enter.
Và sau đó dữ liệu đó sẽ được lưu trữ trong một biến có tên là I.
Vì vậy, bây giờ chúng tôi chỉ muốn in những gì chúng tôi đã nhập.
Vì vậy, ở đây chúng tôi sẽ nói, chúng tôi sẽ thêm một nguồn cấp dữ liệu dòng để nó có thể đọc được,
vì vậy chúng tôi sẽ sử dụng trình tự thoát của chúng tôi, dấu gạch
chéo ngược n và chúng tôi sẽ nói với bạn.
Bạn đã nhập phần trăm d và chúng tôi sẽ để hiển thị giá trị của biến.
Và chúng tôi cũng sẽ đặt một nguồn cấp dữ liệu dòng sau.
Vì vậy, giá trị của biến mà chúng tôi muốn hiển thị là tôi.
Chúng ta sẽ kết thúc nó với một dấu chấm phẩy.
Và sau đó là chương trình của chúng tôi.
Vì vậy, một lần nữa in đầu ra, yêu cầu một giá trị, đọc dòng đầu vào 17 xác định rằng dữ
liệu mà chúng tôi đọc là một số nguyên, lưu trữ nó trong, tôi sử
dụng ký hiệu và sau đó in ra những gì chúng tôi vừa nhập.
Vì vậy, hãy xây dựng cái này và hãy chạy nó.
Và bạn sẽ thấy chương trình bắt đầu và sau đó nó tạm dừng vì nó muốn bạn
nhập một giá trị.
Nó cho biết nhập một giá trị.
Vì vậy, tại thời điểm này, tôi phải nhập số mà tôi có thể chuyển đổi thành một chuỗi vì đó là những
gì đang xảy ra.
Vì vậy, ở đây tôi chỉ nói 56.
Và sau đó, tôi sẽ nhấn enter.
Nó chạy hai lần vì máy quét vi-rút của tôi.
Vì vậy, tôi sẽ nói 56 và sau đó nhập.
Và sau đó nó in ra, tôi nhập 56.
Vì vậy, tôi đã có thể nhập thông tin, số và nó đã lưu trữ nó trong một biến.
Cũng giống như printf, bạn thực sự có thể yêu cầu họ nhập
nhiều thứ và lưu trữ trong nhiều biến.
Vì vậy, ở đây sau khi chúng kết thúc bằng một số nguyên, tôi
sẽ nói một phần trăm khác, định dạng phần trăm s, có nghĩa là tôi muốn họ nhập một chuỗi, đây
chỉ là một từ tìm kiếm.
Vì vậy, ở đây, hãy nhớ, nếu đó là một từ, tôi không cần phải cung cấp ký hiệu và.
Vì vậy, tôi chỉ sẽ nói khuấy, tôi muốn lưu trữ dữ
liệu đó trong cửa hàng biến.
Và một lần nữa, chúng ta sẽ tìm hiểu về các biến.
Và sau đó tôi sẽ để chỉ cần in nó ra.
Và tôi đã thêm một biến khác để bạn biết printf và tôi sẽ chỉ đặt dấu
hai chấm trước khi bạn cũng có để chỉ định định dạng mà bạn
đang in, vì vậy chúng là phần trăm s.
Vì vậy, hy vọng điều đó rõ ràng.
Bây giờ tôi sẽ đọc trong hai các đầu vào được phân tách bằng dấu cách, lưu trữ
chúng trong hai biến, I và khuấy và sau đó trưng bày chúng.
Vì vậy, bây giờ nếu chúng tôi xây dựng và chúng tôi chạy.
Vì vậy, ở đây tôi sẽ nhập số 22, tôi sẽ nhấn khoảng trắng và sau đó tôi sẽ nhập tên của mình và sau đó tôi
sẽ quay trở lại.
Khi tôi làm điều đó, chương trình sẽ tạm dừng và nó sẽ
hiển thị số tôi đã nhập và sau đó là chuỗi.
Vì vậy, nó hiển thị 22 và Jason.
Vì vậy, đây là cách bạn có thể nhận được đầu vào từ người dùng, bốn hoặc
năm dòng mã đơn giản.
Một điều nhanh chóng khác mà tôi muốn trình bày bạn là cách bạn có thể đọc hai lần.
Vì vậy, sau này trong các bài học, bạn sẽ được chỉ ra cách đọc thành float và
cách đó thường sử dụng một định dạng được chỉ định phần trăm f.
Nhưng nếu bạn chạy và đọc hai lần, nó thực sự khác một chút
khi bạn sử dụng phần trăm lf, vì vậy loại hãy ghi nhớ điều này trong tâm trí bạn.
Nếu tôi tạo một tên biến double x và sau đó tôi sử dụng scanf để đọc nó, tôi cần đọc nó bằng
cách sử dụng LF phần trăm.
Đó là định dạng chỉ định mà bạn muốn sử dụng.
Và sau đó một lần nữa giống như những cái khác, bạn sẽ sử dụng
dấu và cho địa chỉ và nói x.
Và đây là cách bạn có thể đặc biệt đọc trong một đôi.
Và đó là một sự khác biệt hơn là đọc theo dòng.
Vì vậy, hãy ghi nhớ điều này trong tâm trí bạn.
Khi bạn chạy nó, bạn sẽ nhận thấy nó hoạt động khá đơn giản.
Và bạn có thể đọc đầu vào đọc đôi.
Vì vậy, bạn chỉ cần tiếp tục và chạy nó.
Và vì vậy nó sẽ yêu cầu gấp đôi, tôi đã không thực sự làm được nhiều.
Và số đôi này giống như 77. 8 và sau đó chúng tôi sẽ đọc nó và lưu trữ
nó, nó khá đơn giản.
Vì vậy, scanf rất hữu ích như tôi đã đề cập.
Những thứ khác với scanf bạn sẽ nhận thấy khi bạn đi
qua khóa học là scanf đôi khi không hoạt động tốt như vậy.
Bạn có thể sử dụng f get s cho những thứ khác.
Vấn đề chính với scanf là khi bạn đọc, bạn chỉ đang đọc cho đến
khi bạn nhìn thấy khoảng trống.
Và vì vậy nếu bạn cố gắng sử dụng scanf, bạn cố
gắng gọi nó nhiều lần trong một hàm.
Với các kết hợp khác, nó có thể không hoạt
động tốt lắm bởi vì những gì đang xảy ra là khi bạn
nhấn vào nút quay lại trên bàn phím, nó sẽ không đọc nút quay lại đó
vì nó chỉ đọc thành một từ.
Và vì vậy nó sẽ không để lấy nguồn cấp dữ liệu dòng.
Vì vậy, trong lần tiếp theo bạn sử dụng scanf, nó sẽ ngay lập tức bỏ qua dòng
đó và nó sẽ để đọc trong nguồn cấp dữ liệu dòng.
Vì vậy, đây là một vấn đề bạn sẽ thấy nếu bạn lần lượt
viết nhiều bản scanfs trong một chương trình, bạn sẽ nhận
thấy rằng các bản quét khác không thực thi vì họ đang đọc trong nguồn cấp dữ liệu dòng.
Một cách rất dễ dàng để vượt qua điều đó là ngay sau khi bạn quét, bạn chỉ cần
gọi git char và sau đó bạn gọi một máy quét khác, nhưng đó là một khái niệm
nhiều hơn để nói về sau.
Điều này chỉ để cho bạn thấy khi bạn đọc hai lần bằng cách sử dụng scanf,
hãy đảm bảo rằng bạn sử dụng phần trăm LF.
Và một lần nữa, điều này rất hữu ích vì một số thách thức của chúng tôi sẽ giúp bạn sắp xếp
để nhận được thông tin đầu vào từ người dùng để làm những việc hữu ích và
học các khái niệm khác nhau, chúng tôi có thể nhận được thông tin đầu vào từ người dùng.
Vì vậy, tôi hy vọng điều này sẽ giúp.
Và một lần nữa, đừng lo lắng về một số những
khái niệm này mà bạn không hiểu đầy đủ về mọi thứ như các biến và chuỗi, chúng ta sẽ thảo
luận về tất cả những điều đó trong rất nhiều chi tiết, cảm ơn bạn.