ctrl+z 退出输入的循环结构

  • 测试的语言及工具
  • for循环
  • while循环
  • do while循环
  • 进一步探究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今天先试到这里,书屋要关门了 …

几天后的继续

前几天这个cin读入ctrl+z又出了幺蛾子
代码如下

#include<iostream>
using namespace std;
int main()
{int space_num = 0, digital_num = 0, character_num = 0;char c;while (c=cin.get())if (c == ' ')space_num++;else if ((c >= '0') && (c <= '9'))digital_num++;else if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'Z')))character_num++;}cout << "空格个数" << space_num << endl;cout << "数字个数" << digital_num << endl;cout << "字母个数" << character_num << endl;system("pause");return 0;
}

输入ctrl+z后死循环,然后呆了几天没有进展
直到看了另外一本参考书

试了一下cin.get(ch)
代码如下

#include<iostream>
using namespace std;
int main()
{int space_num = 0, digital_num = 0, character_num = 0;char c;while (cin.get(c))if (c == ' ')space_num++;else if ((c >= '0') && (c <= '9'))digital_num++;else if (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'Z')))character_num++;}cout << "空格个数" << space_num << endl;cout << "数字个数" << digital_num << endl;cout << "字母个数" << character_num << endl;system("pause");return 0;
}

一下就正常退出循环了。
看了一下书上的解释,说是cin将输入流状态码设置成了failbit
感觉更像是将cin状态码设置成了eofbit,但在看到源码之前这些都是我的个人猜测吧
至于为什么一个能退出循环一个不能,我想原因在于一个判断字符存的值(vs调试局部变量窗口下显示此时ASCII码值为-1,奇怪), 一个判断cin的直接返回值或许在强制类型转换时,出了问题吧

C++下ctrl+z退出cin输入循环相关推荐

  1. 为什么在 Windows 下用 Ctrl+Z 退出 Python 而 Linux 下用 Ctrl+D 呢?

    打开我们的命令行,输入 python ,我们会进入 python 的交互模式. 当我们想退出 python ,返回我们的 shell 时,你将如何退出? 如上,两个行之有效的方法是输入 exit() ...

  2. Linux下不小心按下Ctrl+Z的解决

    Ctrl + z 的处理 在使用vim进行shell'练习时,一着急就按下了这个"返回撤销"快捷键,然后文档就消失了 然后再想编辑就会这样子::: 为什么呢 在LInux中,这个组 ...

  3. getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析...

    2013-07-18 21:35:58 getchar()函数的返回值赋给char型,用if(ch=getchar() != EOF)测试,输入ctrl+z同样可以结束循环的分析. char是字符型数 ...

  4. C++常用概念——while循环时终止输入(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))

    ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程.常用于终止正在运行的程序. ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程. ctrl-d 不是发 ...

  5. Linux 下的任务切换神器 Ctrl+Z

    一.引言 不知道各位有没有遇到过如下囧境:"正在开心地使用 vim 编辑文件,突然发现忘记复制某些内容,只能暂时保存退出,复制好后重新打开文件继续编辑,或者干脆再打开一个终端,搞得十分凌乱? ...

  6. C++基础:[enter] Ctrl+Z [enter] 问题及\n输入输出问题

    首先来一段代码,引出问题: #include<iostream> #include<Windows.h>using namespace std;int main() {char ...

  7. Linux:Ctrl+C和Ctrl+Z

    目录 简单说明 实例 扩展 简单说明 Linux内核通过进程对任务进行管理,在终端界面启动一个进程后,使用Ctrl+Z和Ctrl+C都可以用退出进程,返回到终端界面.区别在于: Ctrl+C中断了进程 ...

  8. linux中ctrl+z 、ctrl+c、 ctrl+d区别

    ctrl+c和ctrl+z都是中断命令,但是他们的作用却不一样.   ctrl+c是强制中断程序的执行,,进程已经终止.   ctrl+z的是将任务中止(暂停的意思),但是此任务并没有结束,他仍然在进 ...

  9. linux后台运行快捷键,Linux命令放入后台运行方法(和Ctrl+Z)详解版

    Linux 命令放入后台的方法有两种,分别介绍如下. "命令 &",把命令放入后台执行 第一种把命令放入后台的方法是在命令后面加入 空格 &.使用这种方法放入后台的 ...

最新文章

  1. C语言 条件编译详解
  2. 高校“花式查寝”到底多有意思?
  3. 删除10亿人脸数据,Meta关闭了Facebook的人脸识别系统
  4. 独家 | 数据分析@爱可可-爱生活是否在用机器学习算法运营微博
  5. Windows 安装MySQL5.7.0+ 服务
  6. 磁盘格式化与快速格式化有什么区别?
  7. BZOJ.2597.[WC2007]剪刀石头布(费用流zkw)
  8. Bootstrap3 按钮状态提示
  9. 自反而缩,虽千万人,吾往矣。
  10. Blob URL 是什么?
  11. 精确率、召回率、F1 值、ROC、AUC
  12. svn: Commit failed (details follow): svn: Authorization failed
  13. ajax音乐网站,AJAX在线音乐网站(5)测试
  14. HTML特效代码大全(完整)
  15. ORACLE SQL优化大全
  16. Nyko推出平板手柄 为运行在Tegra3上的游戏特别打造
  17. 手把手教你用Python打造一个语音合成系统(已生成软件)
  18. (python)基于GUI编写摄氏度转华氏度
  19. 用诺模图可视化你的模型
  20. Gartner 2022 应用安全测试魔力象限

热门文章

  1. SQL Server启动出现“指定的服务未安装”的解决方法
  2. pajek12-14:聚类系数、结构洞、环
  3. 读取磁盘:LBA方式 以及 CHS方式
  4. 无法定位程序输入点于动态链接库上的原因
  5. 为什么我找不到我的崩溃日志
  6. c语言圆桌算法,算法 – 人们可以在圆桌中坐多少种不同的方式?
  7. 二、openCV+TensorFlow入门
  8. 数据结构-栈(Stack)
  9. html实体转换,字符串html实体转换
  10. zigbee3.0学习笔记@开发指导书@设备地址