《C++杂记》循环终止输入方式(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))

2024-08-30 13:08

本文主要是介绍《C++杂记》循环终止输入方式(Ctrl+Z,Ctrl+C,Ctrl+D(EOF)),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ctrl-c 发送 SIGINT 信号给前台进程组中的所有进程。常用于终止正在运行的程序。

ctrl-z 发送 SIGTSTP 信号给前台进程组中的所有进程,常用于挂起一个进程。

ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。

接下来笔者通过不同的例子来说明这些组合键的差异。

 字符串输入

#include <iostream>  
#include <vector>
#include <string>
using namespace std;int main(){vector<string> a;string tmp;while (cin>>tmp){a.push_back(tmp);}for (vector<string>::iterator iter = a.begin(); iter != a.end(); ++iter){cout << *iter << endl;}return 0;
}

结果:
运行环境:Windows + DEV-C++(Ctrl+Z)

在这里插入图片描述
【注】在终止程序之前需要先回车在按Ctrl+Z,才能进行终止。

运行环境:Ubuntu14.04+ g++(Ctrl+D)
在这里插入图片描述

 输入数字

#include <iostream>  
#include <vector>
#include <string>
using namespace std;int main(){vector<int> a;int tmp;while (cin>>tmp){a.push_back(tmp);}for (vector<int>::iterator iter = a.begin(); iter != a.end(); ++iter){cout << *iter << endl;}return 0;
}

结果:
运行环境:Windows + DEV-C++
结果1(用EOF):
在这里插入图片描述
结果2(用Ctrl+D):
在这里插入图片描述
结果3(用Ctrl+Z):
在这里插入图片描述
运行环境:Ubuntu14.04+ g++(Ctrl+D)
结果1(用EOF):
在这里插入图片描述
结果2(用Ctrl+D):
在这里插入图片描述

 Ctrl+C:

直接就终止程序了(程序和输入string的那个一样)。

 字符统计

在前面讲解了结束的条件,那么统计字符有事如何呢?在K&R的C语言教程里关于输入字母计数的程序,如下:

#include<stdio.h>int main(int argc, char *argv[])
{long coff=0;while(getchar()!=EOF)coff++;printf("%ld\n",coff);return 0;
}

结果:
运行环境:Windows + DEV-C++(Ctrl+Z)

在这里插入图片描述
运行环境:Ubuntu14.04+ g++(Ctrl+D)

在这里插入图片描述
代码不复杂,只有在键盘输入EOF键时,循环才会结束。

那么如何才能从键盘输入EOF呢?(我的编程环境是 windows 10 + DEV-C++),在Windows 下,输入 Ctrl+z 或者F6 键是可以代表EOF的,

例如输入 “abcd^z 回车” 时,程序还在继续,继续后在新的一行输入 “^z 回车” 时,程序才结束,输出5。
如果输入 “abcdZZ^Z 回车 ^Zefg 回车” , 还是输出5。这说明:

 第一行内的三个ZZ^Z并没有算三次;
 第二行开头的^Z后面三个字母efg 并没有计算到coff里,也就是说,程序运行到了接收字母e 时,已经跳出了循环
 abcd 四个字母,再加一次回车,所以输出是5 (如果中间输入两次回车,也就是“abcdZZ^Z 回车 回车 ^Zefg 回车”时,输出是6,就说明)
 while循环遇到^Z开头的新的一行就结束了,无论后面有多少字母,这些输入的字母都没有影响到coff的值

总结一下就是系统用了一个很不常用的键盘组合产生的消息值,来代表EOF,然后是否认定为EOF,需要判断出现的位置。

这篇关于《C++杂记》循环终止输入方式(Ctrl+Z,Ctrl+C,Ctrl+D(EOF))的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1120907

相关文章

Python程序打包exe,单文件和多文件方式

《Python程序打包exe,单文件和多文件方式》:本文主要介绍Python程序打包exe,单文件和多文件方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python 脚本打成exe文件安装Pyinstaller准备一个ico图标打包方式一(适用于文件较少的程

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

Python验证码识别方式(使用pytesseract库)

《Python验证码识别方式(使用pytesseract库)》:本文主要介绍Python验证码识别方式(使用pytesseract库),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1、安装Tesseract-OCR2、在python中使用3、本地图片识别4、结合playwrigh

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

windows系统上如何进行maven安装和配置方式

《windows系统上如何进行maven安装和配置方式》:本文主要介绍windows系统上如何进行maven安装和配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录1. Maven 简介2. maven的下载与安装2.1 下载 Maven2.2 Maven安装2.

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

C/C++的OpenCV 进行图像梯度提取的几种实现

《C/C++的OpenCV进行图像梯度提取的几种实现》本文主要介绍了C/C++的OpenCV进行图像梯度提取的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录预www.chinasem.cn备知识1. 图像加载与预处理2. Sobel 算子计算 X 和 Y

C/C++和OpenCV实现调用摄像头

《C/C++和OpenCV实现调用摄像头》本文主要介绍了C/C++和OpenCV实现调用摄像头,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录准备工作1. 打开摄像头2. 读取视频帧3. 显示视频帧4. 释放资源5. 获取和设置摄像头属性