C++下ctrl+z退出cin输入循环
ctrl+z 退出输入的循环结构
测试的语言及工具
C++
visual studio 2017
for循环
这是我们学校上课提供的C++教材书(C++语言程序设计–刘瑞芳)上的例子,看得我一脸懵逼,于是进行了这次测试
代码如下
int value=0, sum=0;
for (; cin >> value;)
sum += value;
测试结果:
while循环
while循环里面总不能什么都不做吧,于是放了个cout<<i
代码如下
int a[10], i(0);
while (cin>>(a[i])) {
cout << "i的值为" << i << endl;
i++;
}
测试结果:
结论:while可以通过ctrl+z结束循环
do while循环
first trying 失败
代码如下
int a[10], i(0);
cin >> (a[i]);
do{
cin >> (a[i]);
} while (true);
测试结果:
结果分析
while(true)死循环
emmmm貌似不是真正原因,真正原因再与ctrl+z后卡死,不能输入,也没有结束,蒙圈
接下来查资料时间,查阅多方资料后发现一个很在理,ctrl+z结束输入流,Ta说的其他的原因分析就懂不大起了
在另外一些人的资料中还发现个好东西,ctrl+z相当于EOF(别人说的,自己测试了,非也)
也就是说之前的我并没有理解到ctrl+z退出循环的精髓,其实是输入后判断ctrl+z(目前知识水平只允许我这样理解 啊哈) 所以代码应该这样写:
second trying
代码如下
int a[10], i(0);
cin >> (a[i]);
do{
cout << "i的值" << i << endl;
i++;
} while (cin >> (a[i]));
测试结果:
回看for循环再分析
代码
int value=0, sum=0;
for (; cin >> value;)
sum += value;
测试结果:
for循环中cin >> (a[i])
的位置刚好在判断退出循环的位置,所以能够退出循环
回看while循环再分析
测试ctrl+z在变量中的值
代码如下
int a[10], i(0);
while (cin>>(a[i])) {
cout << "i的值为" << i << endl;
i++;
}
cout << a[i] << endl;
测试结果:
结果分析
输出有点奇怪,不急,看样子有点像随机数,可以先初始化一下数组的值全部为6(随便的啦)
a[10] = {6}, i(0);
while (cin >> (a[i])) {
cout << "i的值为" << i << endl;
i++;
}
cout << a[i] << endl;
测试结果:
emmmm出了点意外,不急,最后一招,visual studio调试界面局部变量窗口查看局部变量的值
基础不牢地动山摇啊,这样初始化只会把a[0]初始化为6,其余为0,这下原因就对了
ctrl+z并不会cin到变量
进一步探究ctrl+z在变量内部储存为什么
cin >> intA方式
代码如下
int value;
cin >> value;
cout << value << endl;
测试结果:
结果分析
为随机数,证明没有真正输入进去
cin >> charA方式
代码如下
char value;
cin >> value;
cout << value << endl;
测试结果:
结果分析
空白 呃 这就没办法了visual studio调试走一波
原来还是没有输进去
intA = cin.get() 方式
代码如下
int value;
value=cin.get();
cout << value << endl;
测试结果:
出乎意料的结果
再试一下如果是char类型的会是怎样的结果
代码如下
char value;
value=cin.get();
cout << value << endl;
测试结果:
空白?? 这就没办法了,emmm今天先试到这里,书屋要关门了 …