输入
标准库为输入提供了 istream
。与 ostream
一样,istream
能处理内部数据类型的字符序列表示。它也很容易扩充,以便去应付各种用户定义类型。
运算符 >>
(“取入”)被用做输入运算符;cin
是标准输入流。>>
右边运算对象的类型决定了可以接受什么输入,这个运算对象被作为输入操作的目标。例如,
void f()
{
int i;
cin >> i; // 把一个整数读到i
double d;
cin >> d; // 把一个双精度浮点数读到d
}
从标准输入读一个数,例如 1234
,放入整型变量 i
;再读一个浮点数,例如 12.34e5
,并将它放入双精度浮点变量 d
。
这里是一个例子,它执行从英寸到厘米以及从厘米到英寸的转换。你输入一个数,后面跟着一个表明单位(厘米或英寸)的字符,这个程序就会按照另一种单位输出对应的值。
int main()
{
const float factor = 2.54; // 1英寸等于2.54厘米
float x, in, cm;
char ch = 0;
cout << "enter length: ";
cin >> x; // 读入一个浮点数
cin >> ch; // 读入后缀
switch(ch)
{
case 'i':
in = x;
cm = x * factor;
break;
case 'c':
in = x/factor;
cm = x;
break;
default:
in = cm = 0;
break;
}
cout << in << " in = " << cm << " cm\n";
}
这里的 switch
语句相当于一组常量去检查一个值。break
语句用于跳出 switch
语句。各个分情况常量必须互不相同,default
是可选的,程序员也不一定要提供 default
。
我们经常需要输入一系列字符。完成这件事的一个很方便的方式就是将它们读入一个 string
里。例如,
int main()
{
string str;
cout << "Please enter your name\n";
cin >> str; // #include <string>
cout << "Hello, " << str << "!\n";
}
如果你键入
Eric
回应将是
Hello, Eric!
按照默认方式,一个空白字符,例如空格符,将结束一次输入。因此,如果你键入
Eric Bloodaxe
即使空格后的输入好像是York的那个超肥的国王,回答将仍然是
Hello, Eric!
你可以用函数 getline()
读入一个完整的行。例如,
int main()
{
string str;
cout << "Please enter your name\n";
getline(cin, str);
cout << "Hello, " << str << "!\n";
}
对于这个程序,输入
Eric Bloodaxe
就能将产生所预期的输出
Hello, Eric Bloodaxe!
这种标准字符串有着很好的性质,它可以自动扩展以存放你放进去的任意多的东西。所以,如果你送入了几百万个分号,这个程序也将送回你成页成页的分号---除非你的机器或者操作系统在此之前用完了某种关键性的资源。
🔚