C++ uses a convenient abstraction called streams to perform input and output operations in sequential media such as the screen, the keyboard or a file. A stream is an entity where a program can either insert or extract characters to/from.
The standard library defines a handful of stream objects that can be used to access what are considered the standard sources and destinations of characters by the environment where the program runs:
stream | description |
cin | standard input stream |
cout | standard output stream |
cerr | standard error (output) stream |
clog | standard logging (output) stream |
Standard output (cout)
On most program environments, the standard output by default is the screen, and the C++ stream object defined to access it is cout
.
For formatted output operations, cout
is used together with the insertion operator, which is written as <<
(i.e., two "less than" signs).
1
2
3
| cout << "Output sentence"; // prints Output sentence on screen
cout << 120; // prints number 120 on screen
cout << x; // prints the value of x on screen
|
The <<
operator inserts the data that follows it into the stream that precedes it. In the examples above, it inserted the literal string Output sentence
, the number 120
, and the value of variable x
into the standard output streamcout
. Notice that the sentence in the first statement is enclosed in double quotes ("
) because it is a string literal, while in the last one, x
is not. The double quoting is what makes the difference; when the text is enclosed between them, the text is printed literally; when they are not, the text is interpreted as the identifier of a variable, and its value is printed instead. For example, these two sentences have very different results:
1
2
| cout << "Hello"; // prints Hello
cout << Hello; // prints the content of variable Hello
|
Multiple insertion operations (<<) may be chained in a single statement:
| cout << "This " << " is a " << "single C++ statement";
|
This last statement would print the text This is a single C++ statement
. Chaining insertions is especially useful to mix literals and variables in a single statement:
| cout << "I am " << age << " years old and my zipcode is " << zipcode;
|
Standard input (cin)
In most program environments, the standard input by default is the keyboard, and the C++ stream object defined to access it is cin
.
For formatted input operations, cin
is used together with the extraction operator, which is written as >>
(i.e., two "greater than" signs). This operator is then followed by the variable where the extracted data is stored. For example:
// i/o example
#include <iostream>
using namespace std;
int main ()
{
int i;
cout << "Please enter an integer value: ";
cin >> i;
cout << "The value you entered is " << i;
cout << " and its double is " << i*2 << ".\n";
return 0;
}
cin and strings
The extraction operator can be used on cin
to get strings of characters in the same way as with fundamental data types:
1
2
| string mystring;
cin >> mystring;
|
// cin with strings
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string mystr;
cout << "What's your name? ";
getline (cin, mystr);
cout << "Hello " << mystr << ".\n";
cout << "What is your favorite team? ";
getline (cin, mystr);
cout << "I like " << mystr << " too!\n";
return 0;
}
stringstream
The standard header <sstream>
defines a type called stringstream
that allows a string to be treated as a stream, and thus allowing extraction or insertion operations from/to strings in the same way as they are performed on cin
and cout
. This feature is most useful to convert strings to numerical values and vice versa. For example, in order to extract an integer from a string we can write:
1
2
3
| string mystr ("1204");
int myint;
stringstream(mystr) >> myint;
|
// stringstreams
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main ()
{
string mystr;
float price=0;
int quantity=0;
cout << "Enter price: ";
getline (cin,mystr);
stringstream(mystr) >> price;
cout << "Enter quantity: ";
getline (cin,mystr);
stringstream(mystr) >> quantity;
cout << "Total price: " << price*quantity << endl;
return 0;
}
No comments:
Post a Comment