The I/O Stream Class Library input streams determine when to stop reading input into a variable based on the type of variable being read and the contents of the stream. The easiest way to understand how input is parsed is to write a simple program such as the following, and run it several times with different inputs.
#include <iostream.h>
void main() {
int a,b,c;
cin >> a >> b >> c;
cout << "a: <" << a << ">\n"
<< "b: <" << b << ">\n"
<< "c: <" << c << '>' << endl;
}
The following table shows sample inputs and
outputs, and explains the outputs. In the "Input"
column, <\n> represents a new-line character in the input
stream.
| Input | Output | Remarks |
|---|---|---|
| 123<\n> | No output. a has been assigned the value 123, but the program is still waiting on input for b and c. | |
| 1<\n>
,br 2<\n> 3<\n> |
a: <1> b: <2> c: <3> |
White space (in this case, new-line characters) is used to delimit different input variables. |
| 1 2 3<\n> | a: <1> b: <2> c: <3> |
White space (in this case, spaces) is used to delimit different input variables. There can be any amount of white space between inputs. |
| 123,456,789<\n>
|
a:
<123> b: <-559038737> c: <- 559038737> |
Characters are read into int a up to the first character that is not acceptable input for an integer (the comma). Characters are read into int b where input for a left off (the comma). Because a comma is not one of the allowable characters for integer input, ios::failbit is set, and all further input fails until ios::failbit is cleared. |
| 1.2
2.3<\n> 3.4<\n> |
a: <1> b: <-559038737> c: <-559038737> |
As with the previous example, characters are read into a until the first character is encountered that is not acceptable input for an integer (in this case, the period). The next input of an int causes ios::failbit to be set, and so both it and the third input result in errors. |