Console input and output (or console I/O) refers to the interaction between a program and the user through the command line.
In C++, this is achieved using input and output streams provided by the standard library.
Command | Concept | Description |
---|---|---|
std::cin | Input | Receive data from standard input (usually the keyboard). |
std::cout | Output | Send data to standard output (usually the screen). |
std::cerr | Error | Send error messages to the standard error output. |
std::clog | Warnings | Similar to std::cerr , but used for warning messages. |
Data Input
std::cin
is the standard input stream object in C++. It allows reading data from standard input and is commonly used to read values entered by the user via the keyboard.
To read data from std::cin
, the extraction operator (>>
) is used:
#include <iostream>
int main() {
int number;
std::cout << "Enter an integer: ";
std::cin >> number;
std::cout << "The entered number is: " << number << std::endl;
return 0;
}
In this example,
- The program prompts the user to enter an integer.
std::cin >> number;
reads the value entered by the user- It stores it in the variable
number
.
Reading Strings
To read strings, you can use std::cin
along with the extraction operator:
#include <iostream>
#include <string>
int main() {
std::string name;
std::cout << "Enter your name: ";
std::getline(std::cin, name); // Reads the entire line of input
std::cout << "Hello, " << name << "!" << std::endl;
return 0;
}
In this case, std::getline(std::cin, name);
is used to read a complete line of text, allowing the user to enter names that contain spaces.
Error Handling
When data is entered that is not of the expected type, std::cin
can enter an error state. You can check and handle these errors using the stream state:
#include <iostream>
#include <limits>
int main() {
int number;
std::cout << "Enter an integer: ";
while (!(std::cin >> number)) {
std::cin.clear(); // Clear the error state
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Ignore the invalid input
std::cout << "Invalid input. Please enter an integer: ";
}
std::cout << "The entered number is: " << number << std::endl;
return 0;
}
In this code,
std::cin.clear()
is used to clear the error state of the streamstd::cin.ignore()
is used to discard the invalid input.
Data Output
std::cout
is the standard output stream object in C++. It is used to display data on the console and is commonly used to send information to the user.
To send data to std::cout
, the insertion operator (<<
) is used:
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
Here, std::cout << "Hello, World!" << std::endl;
sends the text “Hello, World!” to the console, followed by a newline (std::endl
).
Output Formatting
You can format the output using stream manipulators:
#include <iostream>
#include <iomanip> // For format manipulators
int main() {
double pi = 3.14159;
std::cout << "Value of Pi: " << std::fixed << std::setprecision(2) << pi << std::endl;
return 0;
}
In this example,
std::fixed
andstd::setprecision(2)
are used to control the formatting of the floating-point number, showing two decimal places.
Stream Manipulators
In addition to std::fixed
and std::setprecision
, there are other useful manipulators:
Command | Description |
---|---|
std::setw(n) | Sets the width of the field for output. |
std::left | Aligns output to the left. |
std::right | Aligns output to the right. |
std::hex | Changes the numeric base of the output to hexadecimal. |
std::oct | Changes the numeric base of the output to octal. |
std::dec | Changes the numeric base of the output to decimal. |
#include <iostream>
#include <iomanip>
int main() {
int number = 255;
std::cout << "Decimal: " << number << std::endl;
std::cout << "Hexadecimal: " << std::hex << number << std::endl;
std::cout << "Octal: " << std::oct << number << std::endl;
return 0;
}
Errors and Warnings
Errors
std::cerr
is used for error output. Unlike std::cout
, std::cerr
is not associated with the output buffer, so error messages are displayed immediately.
#include <iostream>
int main() {
std::cerr << "This is an error message." << std::endl;
return 0;
}
Warnings
std::clog
is similar to std::cerr
, but is generally used for log and warning messages. Its output can be redirected to different places.
#include <iostream>
int main() {
std::clog << "This is a log message." << std::endl;
return 0;
}
Practical Examples
Basic Calculator
Below is an example of a basic calculator that uses std::cin
and std::cout
to perform simple arithmetic operations.
#include <iostream>
int main() {
double num1, num2;
char op;
std::cout << "Enter two numbers: ";
std::cin >> num1 >> num2;
std::cout << "Enter an operation (+, -, *, /): ";
std::cin >> op;
switch(op) {
case '+': std::cout << "Result: " << num1 + num2 << std::endl; break;
case '-': std::cout << "Result: " << num1 - num2 << std::endl; break;
case '*': std::cout << "Result: " << num1 * num2 << std::endl; break;
case '/': std::cout << "Result: " << num1 / num2 << std::endl; break;
default: std::cout << "Invalid operation" << std::endl;
}
return 0;
}
Data Reading and Reporting
This example demonstrates how to read input data and then report that data back to the user.
#include <iostream>
#include <string>
int main() {
std::string name;
int age;
std::cout << "Enter your name: ";
std::getline(std::cin, name);
std::cout << "Enter your age: ";
std::cin >> age;
std::cout << "Hello, " << name << ". You are " << age << " years old." << std::endl;
return 0;
}