Tiếp tục nào
Yêu cầu nhập dữ liệu người dùng
Chúng ta đã học cách hiện dữ liệu ra màn hình rồi. Bây giờ sẽ là theo chiều ngược lại, nghĩa là yêu cầu người dùng nhập dữ liệu của họ vào bộ nhớ.
Nhập dữ liệu từ console
C++ nói riêng và ngôn ngữ lập trình nói chung sử dụng rất nhiều từ khóa bắt nguồn từ tiếng Anh.
cout
là một ví dụ. Trong tiếng Anh, "out" có nghĩa là "ra" thế nên cout
cho phép chúng ta đưa luống dữ liệu từ trong chương trình ra ngoài. Ngược lại với "out" là "in" nghĩa là "vào", vì thế, chúng ta cũng sẽ có cin
cho phép nhập dữ liệu từ bên ngoài vào trong chương trình.
Nếu đi cùng với
cout
là <<
thì đi cùng cin
sẽ là >>
.
Dưới đây là một ví dụ minh họa.
Và giờ chạy thử nhé
Mình có 1 luư nhở ở đây là mình dùng Visual stdio 2012 nên khi biuld mình sẽ dùng thêm dòng
- System("pause");
Tiếp tục vào vấn đề :
!Chuyện gì đã xảy ra bên trong máy tính?
Chương trình hiển thị thông điệp hỏi "Ban bao nhieu tuoi ?". Đến đây, tất cả mọi thứ vẫn bình thường. Ở dòng số 7, chương trình yêu cầu máy tính 1 ô nhớ và dán nhãn
soTuoi
lên đó.
Tiếp theo, mọi chuyện trở nên thú vị hơn khi máy tính hiện lên 1 con trỏ nhấp nháy chờ bạn nhập dữ liệu gì đó. Sau khi bạn đã nhập xong và ấn phím Enter, chương trình lưu số mà bạn vừa nhập vào trong ô
soTuoi
thay vì giá trị 0 mà bạn đưa ra lúc ban đầu.
Cuối cùng lại là một dòng lệnh thông thường dùng để hiển thị giá trị biến.
Mẹo vặt để nhớ chiều của phép toán
Nhiều người vẫn hay nhầm lẫn chiều của phép toán, sử dụng
cout
với >>
và cin
với <<
và điều này không đúng. Mỗi người sẽ có cách ghi nhớ khác nhau, nhưng tôi sẽ cung cấp cho các bạn hình vẽ tôi hay liên tưởng đến để không nhầm lẫn.
Khi chúng ta muốn hiển thị dữ liệu ra màn hình, dữ liệu đi ra khỏi bộ nhớ nên dấu mũi tên hướng về phía
cout
. Còn khi chúng ta yêu cầu người dùng nhập dữ liệu thì ngược lại, thông tin đi vào bộ nhớ nên dấu mũi tên hướng ra xa cin
. Hy vọng sẽ không có ai nhầm lẫn nữa .
Với các kiểu dữ liệu khác
Tất cả những thứ chúng ta nói trên đây đều có hiệu lực với những kiểu dữ liệu khác nữa.chắc các bạn cũng tự làm được những cái tương tự đúng không nào
Lưu ý nhỏ: Trong C++ kiểu dữ liệu char sẽ được đóng trong khung hay dấu ngoặc kép đơn.
- VD: char kiTu = 'a';
- VD: string = "Vo danh" ;
Với đoạn mã trên chắc bạn chạy khá ngon lành nhưng nếu mình viết code như dưới đây thì chuyện gì sẽ sảy ra
Các bạn đã chạy thử đoạn mã bên trên chưa? Cùng xem chuyện gì xảy ra nhé?.
Mọi chuyện vẫn ổn cho đến khi bạn nhập cả họ tên và nó sẽ thành như sau:
Cái chuyện quái gì sảy ra với cái chương trình tôi đang viết vậy nhỉ nó không yêu cầu nhập tuổi mà nhảy ra 1 con số quái gì kia
Vấn đề nằm ở dấu cách mà bạn đã đặt giữa họ và tên của mình. Khi bạn nhấn phím Enter, máy tính sẽ ghi dữ liệu mà bạn nhập vào trong ô nhớ. Nhưng mà dữ liệu sẽ được coi là kết thúc nếu chương trình bắt gặp dấu cách hoặc ký tự xuống dòng. Khi bạn cần nhập 1 số thì đây không phải là vấn đề vì trong 1 số thì không có dấu cách. Với kiểu string thì khác, trong chuỗi ký tự thì việc có dấu cách là rất bình thường. Thế là máy tính sẽ ngắt dòng dữ liệu không đúng chỗ, nghĩa là sau chữ đầu tiên. Và vì máy tính thì cũng không được thông minh lắm, nó sẽ coi chữ tiếp theo là giá trị của pi.
Chúng ta có 1 giải pháp cho vấn đề này, đó là thay vì chỉ lấy chữ đầu tiên, chúng ta sẽ coi dũ liệu cần nhập là cả dòng. Để làm việc này, chúng ta sẽ dùng hàm
getline()
. Chúng ta sẽ xem xét kỹ hơn thế nào là 1 hàm sau, giờ cứ thử dùng để giải quyết trường hợp này đã.
Cách dùng hàm getline() : Getline(cin , tenbien);
Và Kết quả là:
Vấn đề đã được giải quyết :)
Mình sẽ kết thúc bài viết tại đây và sẽ cố gắng update bài đều đặn 2 bài 1 tuần nhé bye ;)
ConversionConversion EmoticonEmoticon Off Topic