Trong bài học này, chúng ta sẽ nói nhiều hơn về std :: cout, thứ mà chúng ta đã sử dụng trong chương trình Hello Word!. Chúng ta sẽ tìm hiểu cách lấy giá trị đầu vào từ người dùng, thứ mà chúng ta sẽ sử dụng để làm cho các chương trình có thể tương tác được.
Nội dung chính
1. Thư viện iostream
Thư viện iostream là một trong các thư viện chuẩn của C ++ liên quan đến đầu vào và đầu ra. Chúng ta sẽ sử dụng các hàm trong thư viện này để nhận đầu vào từ bàn phím và xuất dữ liệu ra console. Phần io của iostream là viết tắt của input / output.
Để sử dụng hàm được định nghĩa trong thư viện iostream, chúng ta cần include thư viện iostream ở đầu của bất kỳ file code nào muốn sử dụng các hàm iostream, Ví dụ như vậy:
#include <iostream>
// rest of code that uses iostream functionality here
2. std::cout
Thư viện iostream chứa một vài biến được đinh nghĩa trước để chúng ta sử dụng. Một trong những thứ hữu ích nhất là std :: cout, cho phép chúng ta gửi dữ liệu đến console để được in ra văn bản. cout là viết tắt của “character output”.
Chương trình Hello world:
#include <iostream> // for std::cout
int main()
{
std::cout << "Hello world!"; // print Hello world! to console
return 0;
}
Trong chương trình này, chúng ta đã bao gồm iostream để chúng ta có quyền truy cập vào std :: cout. Bên trong hàm main của chương trình, chúng ta sử dụng std :: cout, cùng với toán tử chèn (<<), để gửi văn bản Hello world! đến console.
std :: cout không chỉ có thể in văn bản, nó còn có thể in số:
#include <iostream> // for std::cout
int main()
{
std::cout << 4; // print 4 to console
return 0;
}
Kết quả:
4
Nó cũng có thể được sử dụng để in giá trị của các biến:
#include <iostream> // for std::cout
int main()
{
int x{ 5 }; // define integer variable x, initialized with value 5
std::cout << x; // print value of x (5) to console
return 0;
}
Điều này tạo ra kết quả:
5
Để in nhiều hơn một thứ trên cùng một dòng, toán tử chèn (<<) có thể được sử dụng nhiều lần trong một câu lệnh để nối (liên kết với nhau) nhiều phần đầu ra. Ví dụ:
#include <iostream> // for std::cout
int main()
{
std::cout << "Hello" << " world!";
return 0;
}
Chương trình này in:
Hello world!
Ở đây, một ví dụ khác, nơi chúng tôi in cả văn bản và giá trị của một biến trong cùng một câu lệnh:
#include <iostream> // for std::cout
int main()
{
int x{ 5 };
std::cout << "x is equal to: " << x;
return 0;
}
Chương trình này in:
x is equal to: 5
3. std::endl
Bạn mong đợi chương trình này sẽ in cái gì?
#include <iostream> // for std::cout
int main()
{
std::cout << "Hi!";
std::cout << "My name is Alex.";
return 0;
}
Bạn có thể ngạc nhiên với kết quả:
Hi!My name is Alex.
Nếu chúng ta muốn in ra các dòng một cách riêng biệt ra console, chúng ta cần cho console biết khi nào nên di chuyển con trỏ đến dòng tiếp theo.
Một cách để làm điều đó là sử dụng std :: endl. Khi dùng std :: cout, std :: endl sẽ in ra một ký tự xuống dòng mới ra console (khiến con trỏ đi đến đầu dòng tiếp theo). Trong bối cảnh này, endl là viết tắt của “end line”.
Ví dụ:
#include <iostream> // for std::cout and std::endl
int main()
{
std::cout << "Hi!" << std::endl; // std::endl will cause the cursor to move to the next line of the console
std::cout << "My name is Alex." << std::endl;
return 0;
}
Kết quả:
Hi!
My name is Alex.
4. std::endl vs ‘\n’
Sử dụng std :: endl có thể hơi kém hiệu quả, vì nó thực sự thực hiện hai công việc: nó di chuyển con trỏ đến dòng tiếp theo và nó nhảy ra đầu ra (đảm bảo rằng nó hiển thị ngay trên màn hình).
Do đó, việc sử dụng ký tự ‘\ n, thường được ưu tiên hơn. Ký tự ‘\ n’ di chuyển con trỏ sang dòng tiếp theo, nhưng không thực hiện thao tác thừa, do đó nó hoạt động tốt hơn. Ký tự ‘\ n’ và cũng có xu hướng dễ đọc hơn vì nó vừa ngắn hơn và có thể được nhúng vào văn bản hiện có.
Ở đây, một ví dụ sử dụng ‘\ n’, theo hai cách khác nhau:
#include <iostream> // for std::cout
int main()
{
int x{ 5 };
std::cout << "x is equal to: " << x << '\n'; // Using '\n' standalone
std::cout << "And that's all, folks!\n"; // Using '\n' embedded into a double-quoted piece of text (note: no single quotes when used this way)
return 0;
}
Kiết quả:
x is equal to: 5
And that's all, folks!
Lưu ý:
‘\n’, sử dụng dấu gạch chéo ngược (cũng như tất cả các ký tự đặc biệt trong C ++), không phải là dấu gạch chéo về phía trước. Thay vào đó, sử dụng dấu gạch chéo (ví dụ ‘/ n) có thể dẫn đến hành vi không mong muốn.
5. std::cin
std :: cin là một biến được định nghĩa trong thư viện iostream. Trong khi std :: cout in dữ liệu lên console bằng cách sử dụng toán tử chèn (<<), std :: cin (viết tắt của “character input”), đọc dữ liệu từ bàn phím bằng toán tử trích xuất (>>). Đầu vào phải được lưu trữ trong một biến và sử dụng nó.
#include <iostream> // for std::cout and std::cin
int main()
{
std::cout << "Enter a number: "; // ask user for a number
int x{ }; // define variable x to hold user input (and zero-initialize it)
std::cin >> x; // get number from keyboard and store it in variable x
std::cout << "You entered " << x << '\n';
return 0;
}
Hãy thử biên dịch chương trình này và chạy nó. Khi bạn chạy chương trình, dòng 5 sẽ in ra Enter a number: . Khi code chạy được đến dòng 7, chương trình của bạn sẽ đợi bạn nhập dữ liệu. Khi bạn nhập một số (và nhấn enter), số bạn nhập sẽ được gán cho biến x. Cuối cùng, trên dòng 8, chương trình sẽ in ra số của bạn đã nhập vào
Ví dụ: (tôi đã nhập 4):
Enter a number: 4
You entered 4
Đây là một cách dễ dàng để có được đầu vào từ bàn phím từ người dùng và chúng ta sẽ sử dụng nó trong nhiều ví dụ trong các phần tiếp. Lưu ý rằng bạn không cần phải sử dụng ‘\ n, khi chấp nhận đầu vào, vì người dùng sẽ cần nhấn phím enter để chấp nhận đầu vào của họ và điều này sẽ di chuyển con trỏ đến dòng tiếp theo.
Nếu màn hình của bạn đóng ngay lập tức sau khi nhập số, Hãy thử chạy trong chế độ Bắt đầu mà không cần Debugging (Ctrl-F5).
Lưu ý:
Có một số tranh luận về việc liệu nó có cần thiết để khởi tạo một biến ngay lập tức trước khi bạn cung cấp cho nó một giá trị do người dùng cung cấp thông qua một nguồn khác (ví dụ: std :: cin), vì giá trị do người dùng cung cấp sẽ ghi đè lên giá trị khởi tạo. Theo gợi ý trước đây của chúng ta rằng các biến phải luôn được khởi tạo, cách tốt nhất là khởi tạo biến trước.
Chúng ta sẽ thảo luận về cách std :: cin xử lý đầu vào không hợp lệ trong một bài học tiếp theo
Thư viện iostream C ++ không cung cấp cách chấp nhận nhập liệu bàn phím mà không cần người dùng phải nhấn enter. Nếu đây là thứ bạn mong muốn, bạn sẽ phải sử dụng thư viện của bên thứ ba. Đối với các ứng dụng console, chúng ta khuyên bạn sử dụng thư viện pdcurses. Nhiều thư viện đồ họa người dùng có hàm riêng của họ để làm điều này.
6. Tóm lược
Các lập trình viên mới thường trộn lẫn std :: cin, std :: cout, toán tử chèn (<<) và toán tử trích xuất (>>). Đây là một cách dễ nhớ:
- std :: cin và std :: cout luôn đi ở phía bên trái của câu lệnh.
- std :: cout được sử dụng để xuất giá trị (cout = character output)
- std :: cin được sử dụng để lấy giá trị đầu vào (cin = character input)
- << được sử dụng với std :: cout và hiển thị dữ liệu. std :: cout << 4 chuyển giá trị của 4 sang console
- >> được sử dụng với std :: cin và hiển thị dữ liệu. std :: cin >> x di chuyển giá trị người dùng đã nhập từ bàn phím vào x
[…] Chúng ta đã tìm hiểu tại bài Giới thiệu về iostream: cout, cin và endl. […]
Bình luận bị đóng.