|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 一叶枫残 于 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.首先是单独写一个语句
编译不会报错,也不会对程序运行结果的正确性产生影响
2.写成
程序编译会报错
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)输入为
输出为i =14,k =15
(2)输入为
输出为i =12,k =15
(3)输入为
输出为i =14,k =52
(4)输入为
输出为i =11,k =3
(5)输入为
输出为i =12,k =0
(6)输入为
输出为i =0,k =21
输入为
输出为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;
- }[code]
- 当输入一个14回车时,输出为
- [code]输入正确
- i = 14
复制代码
这个时候,程序还没有结束,还可以继续输入
我们再次输入158,输出
最后输入14s482,输出为
这表明当读到 s 的时候,cin >> i把 s 前面的14赋值给i,然后进入循环输出,接着 s 这个非法输入令cin >> i返回了false,退出了循环,这时候给i赋值的是0
其他知识点:C++可以在代码的中间定义变量
|
|