1.对于一个被声明为int的变量n,如果在输入的时候输一个字符进去会如何:
int n ;
cin >> n ;
cout << "Now, n = " << n << endl ;
cout << "Input again: " ;
cin >> n ;
cout << "And then, n = " << n << endl ;
运行结果:
g
Now, n = 0
Input again: And then, n = 0
在第一次输入中如果输入了字符g,就失去了第二次输入机会,同时n此后就是0,之后一直都会是0。在下面的循环语句中:
do
{
cin >> n ;
cout << "n = " << n << endl ;
} while (n != 7) ;
输入一个字符进去,回车后成了这样:
n = 0
n = 0
n = 0
n = 0
n = 0
n = 0
......
陷入了死循环,再也没有重新输入的机会了。
即便是改成这样情况依然不会改变:
do
{
cin >> n ;
cin.get() ;
cout << "n = " << n << endl ;
} while (n != 7) ;
2.C++ 11新增加了一种循环,基于范围的for循环,这简化了一种常见的循环任务,即对数组或容器类的各个元素进行相同的操作,比如:
double prices[5] = {4.99, 10.99, 6.78, 7.99, 8.49} ;
for (double x : prices)
cout << x << std::endl ;
再或者这样:
for (int x : {3, 5, 2, 8, 6})
cout << x << " " ;
cout << '\n' ;
但要想靠这样来修改内容是不行的,得用这种办法:
for (double &x : prices)
{
x = x * 0.8 ;
}
3.原因在cin,读取char值时,与读取其他基本类型一样,cin将忽略空格和换行符。因此输入中的空格没有被回显,也没有被包含在计数内。