《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

相关文章

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

SpringCloud之consul服务注册与发现、配置管理、配置持久化方式

《SpringCloud之consul服务注册与发现、配置管理、配置持久化方式》:本文主要介绍SpringCloud之consul服务注册与发现、配置管理、配置持久化方式,具有很好的参考价值,希望... 目录前言一、consul是什么?二、安装运行consul三、使用1、服务发现2、配置管理四、数据持久化总

SpringBoot @Scheduled Cron表达式使用方式

《SpringBoot@ScheduledCron表达式使用方式》:本文主要介绍SpringBoot@ScheduledCron表达式使用方式,具有很好的参考价值,希望对大家有所帮助,如有... 目录Cron 表达式详解1. 表达式格式‌2. 特殊字符解析3. 常用示例‌4. 重点规则5. 动态与复杂场景‌

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

C++字符串提取和分割的多种方法

《C++字符串提取和分割的多种方法》在C++编程中,字符串处理是一个常见的任务,尤其是在需要从字符串中提取特定数据时,本文将详细探讨如何使用C++标准库中的工具来提取和分割字符串,并分析不同方法的适用... 目录1. 字符串提取的基本方法1.1 使用 std::istringstream 和 >> 操作符示