鱼C论坛

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

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

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

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

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

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.首先是单独写一个语句
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 s  14
输出为i =12,k =0
(6)输入为
s 12  11
输出为i =0,k =21
输入为
s 14  231
输出为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,输出
输入正确
i = 158
最后输入14s482,输出为
输入正确
i = 14
输入错误
i =0
这表明当读到 s 的时候,cin >> i把 s 前面的14赋值给i,然后进入循环输出,接着 s 这个非法输入令cin >> i返回了false,退出了循环,这时候给i赋值的是0


其他知识点:C++可以在代码的中间定义变量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 00:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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