输入输出(3)——C++的标准输入流

目录

一、cin 流

二、成员函数 get 获取一个字符

(一)无参数的get函数。

(二)有一个参数的get函数。

(三)有3个参数的get函数

(四)用成员函数 getline 函数读取一行字符

(五)用成员函数 read 读取一串字符

(六)istream 类的其他成员函数

1、eof函数

2、peek函数。

3、 putback 函数

4、ignore 函数。


标准输入流是从标准输入设备(键盘)流向内存的数据

一、cin 流

cin 必须和运算符“>>”一起使用。用 cin 实现输人的一般形式为:

cin>>变量名或对象名>>变量名或对象名…;

在上述语句中,流提取运算符“>>”可以连续写多个,每个后面跟一个变量名或对象名,它们是获得输入值的。看下面的例子。 定义两个变量,从键盘输入其值,并输出。

#include<iostream>
using namespace std;
int main()
{
	int m, n;

	cout << "Enter two integers:";
	cin >> m >> n;
	cout << "m= " << m << " ," << "n= " << n << endl;
	return 0;
}


执行该程序在屏幕上显示如下内容:

Enter two integers:1 2
m=1,n=2

这里从键盘上输人的两个int型数据之间用空白符(包括空格符、制表符、回车符)分隔。程序中的变量通过流提取符“>>”从流中提取数据。

流提取符“>>”从流中提取数据时通常跳过输入流中的空格、Tab键、换行符等空白字符。

注意,只有在输入完数据并按回车键后,该行数据才被送人键盘缓冲区,形成输入流,流提取运算符“>>”才能从中提取数据。

二、成员函数 get 获取一个字符

istream类的成员函数get可以从输人流中获取一个字符,

该函数在iostream类体的原型声明语句如下:
 

int get();//从输人流中获取单个字符或EOF,并返回它
istream & get(char& rch);//从输入流中获取单个字符
istream& get(unsigned char& ruch);
istream& get(signed char& rsch);
istream& get(char* pch, int nCount, char delim = '\n');
istream& get(unsigned char* puch, int nCount, char delim = '\n');
istream& get(signed char* psch, int nCount, char delim = '\n');
istream& get(streambuf& rsb, char delim = '\n');


(一)无参数的get函数。

无参数的 get 函数的作用是从指定的输人流中提取一个字符,函数的返回值就是读取的字符

若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF。看下面的例子。
 

#include<iostream>
using namespace std;
int main()
{
	char c;
	cout << "Enter a sentence: " << endl;
	while ((c = cin.get()) != EOF)cout.put(c);
	cout << "OK!" << endl;
	return 0;

}

执行该程序在屏幕上显示如下内容:

Enter a sentence:
Today is Sunday.(输入一行字符)

Today is Sunday.(输出上行字符)

^Z/(程序结束)

OK!



C语言中的getchar()函数与istream类的成员函数get的功能相同,在C++中依旧明以使用。

(二)有一个参数的get函数。

以“ istream & get ( char & rch ) ; ”为例,

介绍其调用形式为:cin.get(c)                                                             

其作用是从输人流中读取一个字符,赋给字符变量。

如果读取成功则丽数返回非值(真),如失败(遇文件结束符)则函数运回。

# include<iostream>
using namespace std;
int main() {
	char c; 
	cout << "Enter a sentence: " << endl;
	while ((c = cin.get()) != EOF)//读取一个字符赋给字符变量c,如果读取成功cin.get(c)为真
	cout.put(c);
	cout << "OK!" << endl;
	return 0;
}

(三)有3个参数的get函数

以“istream& get( char * peh, int nCoun, char delim=\n);"为例,

介绍使用该函数可以实现输入一行字符。

在get函数的3个形参中,

1. pch可以是一个字符数组或一个字符指针。

2. nCount是一个int型数,用来限制从输入流中读取到pch字符数组中的字符个数,最多只能读 nCount-1个,因为要留出最后一个位置存放结束符。

3. delim是读取字符时指定的结束符,其默认值为“\n”,终止字符也可以用其他字符,如 cin.get(ch,10,x’)

上述有3个形参的get函数的作用是从输人流中读取nCount-1个字符,赋给指定的字符数组(或字符指针),如果在读取nCount-1个字符之前遇到指定的终止字符,则提前结束读取

如果读取成功则函数返回非0值(真),如失败则函数返回0值(假)。例如:

#include<iostream>
using namespace std;
int main()
{
	char ch[20];
	cout << "Enter a sentence :" << endl;
	cin.get(ch, 10, '\n');//指定换行符为终止字符
	cout << ch << endl;
	cout << "OK!" << endl;
	return 0;
}

程序输出结果:

Enter a sentence :
shurushuchu
shurushuc
OK!

(四)用成员函数 getline 函数读取一行字符

istream类的成员函数getline的作用是从输入流中读取一行字符,该函数在ream类体中的原型声明语句如下:

istreams getline(char* pch, int nCount, char delim='\n');
istreams getline (unsigned char * puch, int nCount, char delim= '\n' );
istreams getline (signed char* psch, int nCount, char delim='\n');

该函数的形参表和用法与上面讲述的利用get函数输入一行字符的功能类似。

(五)用成员函数 read 读取一串字符

istream类的成员函数read可以从输入流中读取指定数目的字符并将它们存放在指定的数组中,该函数在iostream类体中的原型声明语句如下:

istreams read(char* pch, int nCount);
istreams read(unsigned char* puch, int nCount);
istream& read(signed char* psch, int nCount);

pch是用来存放读取来的字符的字符指针或者是字符数组,

nCount是一个int型数,用来指定从输入流中读取字符的个数。

#include<iostream>
using namespace std;
int main()
{
	const int S = 10;
	char buf[S] = "";
	cout << "Enter … \n";
	cin.read(buf, S);
	cout << buf << endl;
	return 0;
}

程序运行结果:

Enter …
123
456
^Z
123
456

(六)istream 类的其他成员函数

除了以上介绍的用于读取数据的成员函数外,istream类还有其他在输人数据时用得着的一些成员函数。常用的有以下几个。


1、eof函数

eof是 end offile 的缩写,表示“文件结束”。从输人流读取数据,如果到达文件末尾(遇文件结束符),eof函数值为非零值(表示真),否则为0(假)。其调用格式为:

cin.eof();

逐个读取一行字符, 将其中的非空格字符输出:

#include<iostream>
using namespace std;
int main()
{
	char c;
	cout << "Enter …\n";
	while (!cin.eof())
	if ((c = cin.get()) != ' ')cout.put(c);
	return 0;
}

程序运行结果 :

Enter …
ILove you
ILoveyou
^Z

2、peek函数。

peek函数的作用是从输人流中返回下一个字符,但它只是观测,指针仍停留在当前位置,遇到流结束标志时返回EOF。其调用形式为:

c=cin.peek();

检测字符1后面是字符2的连续字符组的个数:

#include<iostream>
using namespace std;
int main()
{
int ch, i = 0;
cout << "please Enter a string…\n"; 
while ((ch = cin.get()) != EOF)
{
	if (ch == '1' && cin.peek() == '2')i++;
}
	cout << i << endl;
return 0;
}

程序运行结果:

please Enter a string…
12121212131313141412
^Z
5

peek函数从输入流中返回字符,但不输出,可以利用该函数的这一特点检查字符1后面是否是字符2.如果字符1后面是字符2则i++。

3、 putback 函数

putback函数的调用形式为:

cin.putback(ch);


作用是将前面用get或getline函数从输人流中读取的字符ch返回到输人流,插人到当前指针位置,以供后面读取。

#include<iostream>
using namespace std;
int main()
{
	char ch[10];
	cout << "please enter a sentence:" << endl;
	cin.getline(ch, 8, '/ ');
	cout << "The first part is: " << ch << endl;
	cin.putback(ch[0]); //将第一个句子的第一个字符插入到指针所指处
	cin.getline(ch, 8, '/');
	cout << "The second part is: " << ch << endl;
	return 0;
}

4、ignore 函数。

ignore函数在iostream类中的原型声明语句如下:

istream& ignore(int n=1,int=EOF);

其中,第1个参数为要提取的字符个数,默认值为1,第2个参数为终止字符,默认值为EOF。ignore函数的作用是跳过输人流中指定个数的字符,或在遇到指定的终止字符时提前结束(此时跳过包括终止字符在内的若干字符)。下面的语句实现跳过输人流中5个字符,遇到字符A后就不再跳了。

ignore(5,'A');

用ignore 函数跳过输人流中的字符,

#include<iostream>
using namespace std;
int main()
{
	char ch[20];
	cout << "please enter a sentence:" << endl;
	cin.get(ch,20,'/');
	cout << "The first part is: " << ch << endl;
	//cin.ignore();
	cin.get(ch,20,'/');
	//跳过输入流中一个字符
	cout << "The second part is: " << ch << endl;
	return 0;
}

执行该程序在屏幕上显示如下内容:
Please enter a sentence:
Good news./It's a good news./
The first part is: Good news.
The second part is :


程序中的第2个“cin.get(ch,20,");”语句没有从输人流中读取有效字符到字符数组ch。

如果希望第2个“cin.get(ch,20,"");”语句能读取字符串“It's a good news.”,

就应该设法跳过输入流中第一个“/”,把注释掉的语句“cingnore();”设置为正常语句后,就可以实现此目的。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Basic】Upload-Labs-Linux

文章目录 前言Pass-01Pass-02Pass-03Pass-04Pass-05Pass-06Pass-07Pass-08Pass-09Pass-10Pass-11Pass-12Pass-13Pass-14Pass-15Pass-16解题感悟 前言 美好的一天从刷题开始 Pass-01 我淦20道题&#xff1f;&#xff1f;&#xff1f;一道一道来吧 先看第一道题 先在home里搞一…

蜂窝物联四情监测:助力农业升级,科技赋能打造丰收新篇章!

农业四情指的是田间的虫情、作物的苗情、气候的灾情和土壤墒情。“四情”监测预警系统的组成包括管式土壤墒情监测站、虫情测报灯、气象站、农情监测摄像机&#xff0c;可实时监测基地状况,可以提高监测的效率和准确性&#xff0c;为农业生产提供及时、科学的数据支持&#xff…

碌时刻必备!微信自动回复让你告别消息堆积

在忙碌的时候&#xff0c;我们往往会面临消息堆积如山的情况。无法及时回复消息不仅容易造成交流障碍&#xff0c;还可能错过重要的机会。 但是现在&#xff0c;有一个神奇的工具——个微管理系统&#xff0c;可以帮助我们轻松应对这个问题 &#xff0c;实现微信自动回复。 首…

基于YOLOv8+PySide6的快递分类管理系统

1、背景 随着电子商务的飞速发展&#xff0c;快递行业所承受的数据处理需求愈发庞大。在这样的背景下&#xff0c;传统的手工分类方法已经显得力不从心&#xff0c;因其不仅耗时耗力&#xff0c;还存在着易出错的隐患。因此&#xff0c;迫切需要研发出一套高效而准确的自动化系…

解决问题:Collecting package metadata (current_repodata.json)--faile

目录 解决步骤&#xff1a; 1、创建pip.ini文件&#xff1a;winR对话框中复制输入&#xff1a;%APPDATA%&#xff0c;然后回车。 2、conda添加清华源&#xff1a; 3、这些创建完&#xff0c;重启电脑就可以创建你的虚拟环境了 4、利用镜像源下载库&#xff1a; 5、查看to…

F.费用报销【蓝桥杯】/01背包

费用报销 01背包 思路&#xff1a;f[i][j]表示前i个票据在容量为j的背包中能占的最大值。 #include<iostream> #include<algorithm> using namespace std; int day[13]{0,31,28,31,30,31,30,31,31,30,31,30,31}; int dp[1005][5005]; int s[13]; int last[1005];…

Vue从入门到实战Day07

一、vuex概述 目标&#xff1a;明确vuex是什么&#xff0c;应用场景&#xff0c;优势 1. 是什么&#xff1a; vuex是一个vue的状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;vuex是一个插件&#xff0c;可以帮助我们管理vue通用的数据&#xff08;多组件共享的…

01.msf

文章目录 永恒之蓝下载msfconsolemsfvenom 永恒之蓝 下载 msdn.itellyou.cn msfconsole M e t a s p l o i t C y b e r M i s s i l e C o m m a n d Metasploit Cyber Missile Command MetasploitCyberMissileCommand 的简称 search ms17_010 use 0 或者 use exploit/wind…

WordPress国外超人气主题Vikinger汉化版

WordPress国外超人气主题Vikinger汉化版 前言效果图安装教程领取主题下期更新预报 前言 我们在上一个教程已经学过如何安装WordPress&#xff0c;所以现在不用多说。 效果图 安装教程 下载后先本地解压&#xff0c;找到vikinger.zip文件&#xff0c;上传安装并启用主题。 访…

什么是SSL证书?如何选择SSL证书?

在浏览网站的时候&#xff0c;你会不会有这样一些疑问。 为什么有的网站是http://开头&#xff0c;有的却是https://&#xff1f;它们有什么区别吗&#xff1f; 经常访问的网站&#xff0c;浏览器突然提示“安全证书过期”&#xff0c;提醒你不要浏览该网址&#xff1f; 这一切…

算法打卡 Day13(栈与队列)-滑动窗口最大值 + 前 K 个高频元素 + 总结

文章目录 Leetcode 239-滑动窗口最大值题目描述解题思路 Leetcode 347-前 K 个高频元素题目描述解题思路 栈与队列总结 Leetcode 239-滑动窗口最大值 题目描述 https://leetcode.cn/problems/sliding-window-maximum/description/ 解题思路 在本题中我们使用自定义的单调队列…

腾讯面试:如何提升Kafka吞吐量?

面试题大全&#xff1a;www.javacn.site Kafka 是一个分布式流处理平台和消息系统&#xff0c;用于构建实时数据管道和流应用。它最初由 LinkedIn 开发&#xff0c;后来成为 Apache 软件基金会的顶级项目。 Kafka 特点是高吞吐量、分布式架构、支持持久化、集群水平扩展和消费组…

【JavaScript】初识 Promise

出现原由 先看一个例子&#xff1a; 模拟发送表白信息&#xff0c;如果一个失败&#xff0c;那么再给其他人发送&#xff0c;这时就相当于在失败回调函数中套了一层回调&#xff1b;如果后续还有多个表白对象&#xff0c;那么将一层一层地嵌套下去&#xff0c;也就是回调地狱…

牛客NC367 第K个n的排列【困难 dfs,全排列问题 Java/Go/PHP/C++】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1595969179464e4c940a90b36abb3c54 思路 全排列问题本文提供的答案在力扣同一道题60. 排列序列&#xff0c;超时了但是截止文章发表日&#xff0c;牛客上是能通过全部测试用例的Java代码 import java.util.*;pu…

【面试干货】事务的并发问题(脏读、不可重复读、幻读)与解决策略

【面试干货】事务的并发问题&#xff08;脏读、不可重复读、幻读&#xff09;与解决策略 一、脏读&#xff08;Dirty Read&#xff09;二、不可重复读&#xff08;Non-repeatable Read&#xff09;三、幻读&#xff08;Phantom Read&#xff09;四、总结 &#x1f496;The Begi…

飞速提升中文打字,Master of Typing in Chinese for Mac助你一臂之力

Master of Typing in Chinese for Mac是一款专为Mac用户设计的中文打字练习软件。其主要功能包括帮助用户提高打字速度和准确性&#xff0c;培养盲打技巧&#xff0c;使键盘输入更加高效。 打字速度提升&#xff1a;软件提供多种练习模式&#xff0c;如字母、特殊字符、单词和…

MATLAB:插值函数之interp与griddata

MATLAB 提供了多种插值函数来处理不同维度的数据。其中&#xff0c;interp1、interp2 和 griddata 是常用的插值函数&#xff0c;分别用于一维、二维和多维&#xff08;不规则&#xff09;数据的插值。 之前有对interp1进行过详细介绍&#xff0c;如需详细了解&#xff0c;请查…

非等值连接、等值连接、自然连接

目录 一、笛卡尔积 二、三种连接的关系 三、非等值连接 四、等值连接 五、自然连接 一、笛卡尔积 要理解非等值连接、等值连接、自然连接首先要理解笛卡尔积。 学过《离散数学》的应该很熟悉笛卡尔积。 简单来说&#xff0c;就是有两个集合&#xff0c;其中一个集合中的元…

基于HTML5和CSS3搭建一个Web网页(二)

倘若代码中有任何问题或疑问&#xff0c;欢迎留言交流~ 网页描述 创建一个包含导航栏、主内容区域和页脚的响应式网页。 需求: 导航栏: 在页面顶部创建一个导航栏&#xff0c;包含首页、关于我们、服务和联系我们等链接。 设置导航栏样式&#xff0c;包括字体、颜色和背景颜…

什么是预训练模型

如果你要做一个计算机视觉的应用&#xff0c;相比于从头训练权重&#xff0c;或者说从随机初始化权重开始&#xff0c;如果你下载别人已经训练好网络结构的权重&#xff0c;通常能够进展得相当快&#xff0c;可以用这个作为预训练模型&#xff0c;然后转换到你感兴趣的任务上。…