一叶枫残 发表于 2021-1-30 20:55:49

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]
查看完整版本: C++(2nd for two)