C++(2nd for two)
本帖最后由 一叶枫残 于 2021-2-8 17:59 编辑上一节课后思考作业
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的
“Enter”键时,数据输入结束,程序自动对所有的整数进行求和并打印出结果。
小甲鱼实现的C++版本为:
#include <iostream>
using namespace std;
int main()
{
int sum = 0;
cout << "请输入一串整数和任意数目的空格:";
int i;
while( cin >> i )
{
sum += i;
while( cin.peek() == ' ')
{
cin.get();
}
if( cin.peek() == '\n')
{
break;
}
}
cout << "结果是:" << sum << endl;
return 0;
}
其中的cin >> i相当于输入,其作用为当执行命令回车时,把键盘缓冲区的内容,传输到cin流的内部缓冲区;
对于cin这个操作,我做了几个实验
1.首先是单独写一个语句
cin;
编译不会报错,也不会对程序运行结果的正确性产生影响
2.写成
i << cin;
程序编译会报错
3.对于
#include <iostream>
using namespace std;
int main()
{
int i,k;
cin >> i >> k;
cout << "i =" << i << endl;
cout << "k =" << k << endl;
return 0;
}
不同的输入,输出情况如下:
(1)输入为14
15
输出为i =14,k =15
(2)输入为12 15
输出为i =12,k =15
(3)输入为14 52 78
输出为i =14,k =52
(4)输入为11 3s11
输出为i =11,k =3
(5)输入为12 s14
输出为i =12,k =0
(6)输入为s 1211
输出为i =0,k =21
输入为s 14231
输出为i =0,k =21
对于(6)这个情况,我们在cin >> i >> k与int i,k;之间加入一段语句
cout << "k = " << k << endl;
在输入程序输出k = 21
最后,我们在定义i,k的基础上,多定义两个整形变量j,o,改为cin >> i >> k >> j >> o;
发现程序编译成功
从这些情况可以看出,cin可以在一条语句内对多个变量进行输入赋值,且在输入非法值时,有两种情况
1.输入的非法值前面是空格或是回车
结果会给变量赋值为0,且如果在输入非法值时,赋值为0的变量后面还有变量,非法值后面的输入不再作用于后面变量的赋值,后面变量保持本来的值
2.输入的非法值前面为整形数,例如14s或者14s52,
结果会给变量赋值为14
出现这种情况的原因就是cin << i是有返回值的
我们运行以下代码就可以知道
#include <iostream>
using namespace std;
int main()
{
int i;
while (cin >> i)
{
cout << "输入正确" << endl;
cout << "i = " << i << endl;
}
cout << "输入错误" << endl;
cout << "i =" << i << endl;
return 0;
}
当输入一个14回车时,输出为
输入正确
i = 14
这个时候,程序还没有结束,还可以继续输入
我们再次输入158,输出
输入正确
i = 158
最后输入14s482,输出为
输入正确
i = 14
输入错误
i =0
这表明当读到 s 的时候,cin >> i把 s 前面的14赋值给i,然后进入循环输出,接着 s 这个非法输入令cin >> i返回了false,退出了循环,这时候给i赋值的是0
其他知识点:C++可以在代码的中间定义变量
页:
[1]