1.5 Nhập xuất trong C++

Xin chào đã mấy tuần nay mình không viết bài cũng vì bận và sức khỏe mình không có được tốt cho lắm từ nay mình sẽ viết đều đặn hơn ( 2 bài 1 tuần) nha :)
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");
Dòng này công việc của nó là đợi ta nhập 1 phím bất kì trên bàn phím rồi mới tắt chương trình để ta có thể thấy được kết quả làm việc của mình , Công việc của nó có vậy thôi :)
 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 wink.
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';                                                                                                                  
Còn kiểu dữ liệu string thì phải để trong dấu ngoặc kép 
  • VD: string = "Vo danh" ;                                                                                                          
Vấn đề với dấu cách
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 dự đoán xem nó chạy có ok không , thử đem về máy chạy thử liền thôi :)
 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 ;)
Previous
Next Post »
Thanks for your comment