鱼C论坛

 找回密码
 立即注册
查看: 1540|回复: 0

[技术交流] C++(2nd for two)

[复制链接]
发表于 2021-1-30 20:55:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一叶枫残 于 2021-2-8 17:59 编辑

上一节课后思考作业
要求:编写一个程序,要求用户输入一串整数和任意数目的空格,这些整数必须位于同一行中,但允许出现在该行中的任何位置。当用户按下键盘上的
“Enter”键时,数据输入结束,程序自动对所有的整数进行求和并打印出结果。
小甲鱼实现的C++版本为:
  1. #include <iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         int sum = 0;
  6.        
  7.         cout << "请输入一串整数和任意数目的空格:";
  8.        
  9.         int i;
  10.         while( cin >> i )
  11.         {
  12.                 sum += i;
  13.                 while( cin.peek() == ' ')
  14.                 {
  15.                         cin.get();
  16.                 }
  17.                 if( cin.peek() == '\n')
  18.                 {
  19.                         break;
  20.                 }
  21.         }
  22.        
  23.         cout << "结果是:" << sum << endl;
  24.        
  25.         return 0;
  26. }
复制代码


其中的cin >> i相当于输入,其作用为当执行命令回车时,把键盘缓冲区的内容,传输到cin流的内部缓冲区;
对于cin这个操作,我做了几个实验
1.首先是单独写一个语句
  1. cin;
复制代码

编译不会报错,也不会对程序运行结果的正确性产生影响

2.写成
  1. i << cin;
复制代码

程序编译会报错

3.对于
  1. #include <iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         int i,k;
  6.        
  7.         cin >> i >> k;

  8.         cout << "i =" << i << endl;
  9.         cout << "k =" << k << endl;
  10.        
  11.         return 0;
  12. }
复制代码

不同的输入,输出情况如下:
(1)输入为
  1. 14
  2. 15
复制代码

输出为i =14,k =15
(2)输入为
  1. 12     15
复制代码

输出为i =12,k =15
(3)输入为
  1. 14 52 78
复制代码

输出为i =14,k =52
(4)输入为
  1. 11 3s11
复制代码

输出为i =11,k =3
(5)输入为
  1. 12 s  14
复制代码

输出为i =12,k =0
(6)输入为
  1. s 12  11
复制代码

输出为i =0,k =21
输入为
  1. s 14  231
复制代码

输出为i =0,k =21

对于(6)这个情况,我们在cin >> i >> k与int i,k;之间加入一段语句
  1. 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是有返回值的
我们运行以下代码就可以知道
  1. #include <iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         int i;
  6.        
  7.         while (cin >> i)
  8.         {
  9.                 cout << "输入正确" << endl;
  10.                 cout << "i = " << i << endl;
  11.          }
  12.        
  13.         cout << "输入错误" << endl;
  14.         cout << "i =" << i << endl;
  15.        
  16.         return 0;
  17. }[code]

  18. 当输入一个14回车时,输出为
  19. [code]输入正确
  20. i = 14
复制代码

这个时候,程序还没有结束,还可以继续输入
我们再次输入158,输出
  1. 输入正确
  2. i = 158
复制代码

最后输入14s482,输出为
  1. 输入正确
  2. i = 14
  3. 输入错误
  4. i =0
复制代码

这表明当读到 s 的时候,cin >> i把 s 前面的14赋值给i,然后进入循环输出,接着 s 这个非法输入令cin >> i返回了false,退出了循环,这时候给i赋值的是0


其他知识点:C++可以在代码的中间定义变量
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-2 00:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表