当前位置: 首页 > news >正文

输入输出(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();”设置为正常语句后,就可以实现此目的。

相关文章:

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

目录 一、cin 流 二、成员函数 get 获取一个字符 (一)无参数的get函数。 (二)有一个参数的get函数。 (三&#xff09;有3个参数的get函数 (四&#xff09;用成员函数 getline 函数读取一行字符 (五&#xff09;用成员函数 read 读取一串字符 (六&#xff09;istream 类…...

[力扣题解] 344. 反转字符串

题目&#xff1a;344. 反转字符串 思路 双指针法 代码 class Solution { public:void reverseString(vector<char>& s) {int i, j, temp;for(i 0, j s.size()-1; i < j; i, j--){temp s[j];s[j] s[i];s[i] temp;}} };...

找不到msvcr110.dll无法继续执行代码的原因分析及解决方法

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是找不到msvcr110.dll文件。这个错误通常发生在运行某些程序或游戏时&#xff0c;系统无法找到所需的动态链接库文件。为了解决这个问题&#xff0c;下面我将介绍5种常见的解决方法。 一&#…...

深入理解数仓开发(一)数据技术篇之日志采集

前言 今天开始重新回顾电商数仓项目&#xff0c;结合《阿里巴巴大数据之路》和尚硅谷的《剑指大数据——企业级电商数据仓库项目实战 精华版》来进行第二次深入理解学习。之前第一次学习数仓&#xff0c;虽然尽量放慢速度力求深入理解&#xff0c;但是不可能一遍掌握&#xff0…...

Edge浏览器:重新定义现代网页浏览

引言 - Edge的起源与重生 Edge浏览器&#xff0c;作为Microsoft Windows标志性的互联网窗口&#xff0c;源起于1995年的Internet Explorer。在网络发展的浪潮中&#xff0c;IE曾是无可争议的霸主&#xff0c;但随着技术革新与用户需求的演变&#xff0c;它面临的竞争日益激烈。…...

HDFS,HBase,MySQL,Elasticsearch ,MongoDB分别适合存储什么特征的数据?

HDFS&#xff08;Hadoop Distributed File System&#xff09;通常用于存储大规模数据&#xff0c;适合存储结构化和非结构化数据&#xff0c;例如文本文件、日志数据、图像和视频等。 HBase是基于Hadoop的分布式数据库&#xff0c;适合存储大量非结构化和半结构化的数据&…...

ArcGIS中离线发布路径分析服务,并实现小车根据路径进行运动

ArcGIS中离线发布路径分析服务&#xff0c;您可以按照以下步骤操作&#xff1a; 准备ArcMap项目&#xff1a; 打开ArcMap并加载包含网络分析图层的项目。在ArcMap中&#xff0c;使用 Network Analyst Toolbar 或 Catalog 创建网络数据集&#xff08;Network Dataset&#xff09…...

时政|医疗结果互认

背景&#xff08;存在的问题&#xff09; 看同一种病&#xff0c;换一家医院甚至换一个院区、换一个科室&#xff0c;检查检验还得再来一遍&#xff0c;费钱又费时。开展检查检验结果互认&#xff0c;可以明显减轻患者就医负担。患者不用做重复检查&#xff0c;也可节约就医时…...

华为OD机试【找出通过车辆最多颜色】(java)(100分)

1、题目描述 在一个狭小的路口&#xff0c;每秒只能通过一辆车&#xff0c;假设车辆的颜色只有 3 种&#xff0c;找出 N 秒内经过的最多颜色的车辆数量。 三种颜色编号为0 &#xff0c;1 &#xff0c;2。 2、输入描述 第一行输入的是通过的车辆颜色信息[0,1,1,2] &#xff0…...

hyperf 多对多关联模型

这里使用到三张表&#xff0c;一张是用户&#xff08;users&#xff09;&#xff0c;一张是角色(roles)&#xff0c;一张是用户角色关联表(users_roles)&#xff0c; 首先创建用户模型、角色模型 php bin/hyperf.php gen:model users php bin/hyperf.php gen:model rolesusers…...

每日力扣刷题day03(从零开始版)

文章目录 2024.5.24&#xff08;5题&#xff09;2828.判别首字母缩略词题解一题解二 1365.有多少小于当前数字的数字题解一题解二题解三 2469.温度转换题解一题解二 1502.判断能否形成等差数列题解一题解二 2351.第一个出现两次的字母题解一题解二 2024.5.24&#xff08;5题&am…...

误差反向传播简介与实现

误差反向传播 导语计算图反向传播链式法则 反向传播结构加法节点乘法节点 实现简单层加法乘法 激活函数层实现ReLUSigmoid Affine/Softmax层实现Affine基础版批版本 Softmax-with-Loss 误差反向传播实现梯度确认总结参考文献 导语 书上在前一章介绍了随机梯度下降法进行参数与…...

ATmega328P加硬件看门狗MAX824L看门狗

void Reversewdt(){ //硬件喂狗&#xff0c;11PIN接MAX824L芯片WDIif (digitalRead(11) HIGH) {digitalWrite(11, LOW); //低电平} else {digitalWrite(11, HIGH); //高电平 }loop增加喂狗调用 void loop() { …… Reversewdt();//喂狗 }...

【Redis】 String类型的内部编码与使用环境

文章目录 &#x1f343;前言&#x1f334;内部编码&#x1f384;典型使用场景&#x1f6a9;缓存功能&#x1f6a9;计数&#xff08;Counter&#xff09;功能&#x1f6a9;共享会话&#xff08;Session&#xff09;&#x1f6a9;验证码功能 ⭕总结 &#x1f343;前言 本篇文章重…...

HarmonyOS interface router scale pageTransition SlideEffect.Left ArkTS ArkUI

&#x1f3ac;️create Component export default struct TitleBar {build(){Row(){Text(transition).fontSize(30fp).fontColor(Color.White)}.width(100%).height(8%).backgroundColor(#4169E1).padding({left:10})}}&#x1f39e;️interface export interface IList{ti…...

Go语言(Golang)的开发框架

在Go语言&#xff08;Golang&#xff09;的开发中&#xff0c;有多种开发框架可供选择&#xff0c;它们各自具有不同的特点和优势。以下是一些流行的Go语言开发框架&#xff0c;选择Go语言的开发框架时&#xff0c;需要考虑项目需求、团队熟悉度、社区支持、框架性能和可维护性…...

Python入门第三课——Python 数据类型(详细)

文章回顾 Python入门第一课——Python起步安装、Sublime Text安装教程&#xff0c;环境配置Python入门第二课——Python的变量和简单数据类型 目录 文章回顾前言一、Python的详细数据类型二、各种数据类型和使用方法1.Number&#xff08;数字&#xff09;2、String&#xff08…...

html入门

<!DOCTYPE html><!--每个文件都要加上这个&#xff0c;是html文件的主题--> <html><!--查不多就是c预言的main函数&#xff0c;从头括到尾部--><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8" /…...

蓝桥杯杨辉三角

PREV-282 杨辉三角形【第十二届】【蓝桥杯省赛】【B组】 &#xff08;二分查找 递推&#xff09;&#xff1a; 解析&#xff1a; 1.杨辉三角具有对称性&#xff1a; 2.杨辉三角具有一定规律 通过观察发现&#xff0c;第一次出现的地方一定在左部靠右的位置&#xff0c;所以从…...

【活动】开源与闭源大模型:探索未来趋势的双轨道路

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 开源与闭源大模型&#xff1a;探索未来趋势的双轨道路引言一、开源大模型&#…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习

禁止商业或二改转载&#xff0c;仅供自学使用&#xff0c;侵权必究&#xff0c;如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...