For every program C++ provides the POSIX standard streams—standard input, standard output, and standard error—for input and output. These streams are automatically available without needing to open or close them.
std::cout (pronounced "see-out") is the standard output stream. It's used to display information to the console. You use the insertion operator (<<) to send data to std::cout.
#include <iostream>
int main() {
std::cout << "Hello, world!" << std::endl; // Output to the console
int age = 30;
std::cout << "My age is " << age << ".\n"; // Chaining output
return 0;
}
std::endl inserts a newline character and flushes the output buffer, ensuring the output is displayed immediately. \n inserts a newline, but does not flush.
std::cin (pronounced "see-in") is the standard input stream. It's used to receive input from the keyboard. You use the extraction operator (>>) to read data from std::cin.
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "Enter your name: ";
std::cin >> name; // Read a word
int age;
std::cout << "Enter your age: ";
std::cin >> age; // Read an integer
std::cout << "Hello, " << name << "! You are " << age << " years old.\n";
std::string fullName;
std::cout << "Enter your full name: ";
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Clear the buffer (important!)
std::getline(std::cin, fullName); // Read a line, including spaces
std::cout << "Your full name is: " << fullName << std::endl;
return 0;
}
std::getline(std::cin, string_variable) is used to read an entire line of input, including spaces. It's often used after reading other input with >> to clear the input buffer.
std::cerr (pronounced "see-err") is the standard error stream. It's used to output error messages. It is typically unbuffered, so output appears immediately, even if other output is buffered. std::clog is also for error output but is buffered.
#include <iostream>
int main() {
if (/* some error condition */) {
std::cerr << "An error occurred!" << std::endl;
return 1; // Indicate an error
}
return 0;
}
Using std::cerr for errors allows you to separate error messages from regular output, which is useful for debugging and logging.