在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如:
    cout.put('a');
调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以是字符或字符的ASCII代码(也可以是一个整型表达式)。如
    cout.put(65 + 32);
也显示字符a,因为97是字符a的ASCII代码。

可以在一个语句中连续调用put函数。如:
    cout.put(71).put(79).put(79). put(68).put('\n');
在屏幕上显示GOOD。

[例13.4] 有一个字符串"BASIC",要求把它们按相反的顺序输出。

#include <iostream>
using namespace std;
int main( )
{char *a="BASIC";//字符指针指向'B'for(int i=4;i>=0;i--)cout.put(*(a+i));                  //从最后一个字符开始输出cout.put('\n');return 0;
}

除了使用cout.put函数输出一个字符外,还可以用putchar函数输出一个字符。putchar函数是C语言中使用的,在stdio.h头文件中定义。C++保留了这个函数,在iostream头文件中定义。

[例13.4] 也可以改用putchar函数实现。

#include <iostream>  //也可以用#include <stdio.h>,同时不要下一行
using namespace std;
int main( )
{char *a="BASIC";for(int i=4;i>=0;i--)putchar(*(a+i));putchar('\n');
}

成员函数put不仅可以用cout流对象来调用,而且也可以用ostream类的其他流对象调用。

cin输入流详解

标准输入流是从标准输入设备(键盘)流向程序的数据。在头文件iostream.h中定义了cin、cout、cerr、clog 4个流对象(详情请查看:与C++输入输出有关的类和对象),cin是输入流,cout、cerr、clog是输出流。

cin是istream类的对象,它从标准输入设备(键盘)获取数据,程序中的变量通过流提取符“>>”从流中提取数据。流提取符“>>”从流中提取数据时通常跳过输入流中的空格、tab键、换行符等空白字符。

注意:只有在输入完数据再按回车键后,该行数据才被送入键盘缓冲区,形成输入流,提取运算符“>>”才能从中提取数据。需要注意保证从流中读取数据能正常进行。

例如:
    int a,b;
    cin>>a>>b;
若从键盘上输入
    21  abc↙
变量a从输入流中提取整数21,提取操作成功,此时cin流处于正常状态。但在变量b准备提取一个整数时,遇到了字母a,显然提取操作失败了,此时,cin流被置为出错状态。只有在正常状态时,才能从输入流中提取数据。

当遇到无效字符或遇到文件结束符(不是换行符,是文件中的数据已读完)时,输入流cin就处于出错状态,即无法正常提取数据。此时对cin流的所有提取操作将终止。在 IBM PC及其兼容机中,以Ctrl + Z表示文件结束符。在UNIX和Macintosh系统中,以 Ctrl + D表示文件结束符。当输入流cin处于出错状态时,如果测试cin的值,可以发现它的值为false(假),即cin为0值。如果输入流在正常状态,cin的值为true(真),即cin为 一个非0值。可以通过测试cin的值,判断流对象是否处于正常状态和提取操作是否成功。如:
    if(!cn) //流cin处于出销状态,无法正常提取数据
        cout<<"error";

[例13.5] 通过测试cin的真值,判断流对象是否处于正常状态。

#include <iostream>
using namespace std;
int main( )
{float grade;cout<<"enter grade:";while(cin>>grade)//能从cin流读取数据
   {if(grade>=85) cout<<grade<<"GOOD!"<<endl;if(grade<60) cout<<grade<<"fail!"<<endl;cout<<"enter grade:";}cout<<"The end."<<endl;return 0;
}

流提取符“>>”不断地从流中提取数据(每次提取一个浮点数),如果成功,就陚给 grade,此时cin为真,若不成功则cin为假。如果键入文件结束符,表示数据已完。

运行情况如下:
enter grade: 67↙
enter grade: 89↙
89 GOOD!
enter grade: 56↙
56 fail!
enter grade: 100↙
100 GOOD!
enter grade: ^Z↙//键入文件结束符
The end.

在遇到文件结束符时,程序结束。如果某次输入的数据为
    enter grade: 100/2↙

流提取符">>"提取100,赋给grade,进行if语句的处理。然后再遇到"/",认为是无效字符,cin返回0。循环结束,输出"The end."。

在不同的C++系统下运行此程序,在最后的处理上有些不同。以上是在GCC环境下运行程序的结果,如果在VC++环境(笔者使用win7系统)下运行此程序,在键入Ctrl + Z 时,需要敲击两次回车,程序才输出"The end."。

get()函数读入一个字符

get()函数是cin输入流对象的成员函数,它有3种形式:无参数的,有一个参数的,有3个参数的。

1) 不带参数的get函数
其调用形式为
    cin.get()
用来从指定的输入流中提取一个字符(包括空白字符),函数的返回值就是读入的字符。 若遇到输入流中的文件结束符,则函数值返回文件结束标志EOF(End Of File),一般以-1代表EOF,用-1而不用0或正值,是考虑到不与字符的ASCII代码混淆,但不同的C ++系统所用的EOF值有可能不同。

[例13.6] 用get函数读入字符。

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

运行情况如下:
enter a sentence:
I study C++ very hard.↙(输入一行字符)
I study C++ very hard.              (输出该行字符)
^Z↙(程序结束)

C语言中的getchar函数与流成员函数cin.get( )的功能相同,C++保留了C的这种用法,可以用getchar(c)从键盘读入一个字符赋给c。

2) 有一个参数的get函数
其调用形式为
    cin.get(ch)
其作用是从输入流中读取一个字符,赋给字符变量ch。如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。例13.6可以改写如下:

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

3) 有3个参数的get函数
其调用形式为
    cin.get(字符数组, 字符个数n, 终止字符)

    cin.get(字符指针, 字符个数n, 终止字符)
其作用是从输入流中读取n-1个字符,赋给指定的字符数组(或字符指针指向的数组),如果在读取n-1个字符之前遇到指定的终止字符,则提前结束读取。如果读取成功则函数返回true(真),如失败(遇文件结束符) 则函数返回false(假)。再将例13.6改写如下:

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

运行情况如下:
enter a sentence:
I study C++ very hard.↙
I study

在输入流中有22个字符,但由于在get函数中指定的n为10,读取n -1个(即9个)字符并赋给字符数组ch中前9个元素。有人可能要问:指定n-10,为什么只读取9个字符呢?因为存放的是一个字符串,因此在9个字符之后要加入一个字符串结束标志,实际上存放到数组中的是10个字符。请读者思考:如果不加入字符串结束标志,会 出现什么情况?结果是:在用“cout<<ch”;输出数组中的字符时,不是输出读入的字符串,而是数组中的全部元素。大家可以亲自测试一下ch[9](即数组中第10个元素)的值是什么。

如果输入↙
    abcde
即未读完第9个字符就遇到终止字符、读取操作终止,前5个字符已存放到数组ch[0]到ch[4]中,ch[5]中存放'\0'。

如果在get函数中指定的n为20,而输入22个字符,则将输入流中前19个字符赋给字符数组ch中前19个元素,再加入一个'\0'。

get函数中第3个参数可以省写,此时默认为'\n'。下面两行等价:
    cin.get(ch,10,'\\n');
    cin.get(ch,10);
终止字符也可以用其他字符。如
    cin.get(ch,10,'x');
在遇到字符'x'时停止读取操作。

转载于:https://www.cnblogs.com/Caden-liu8888/p/5839277.html

C++学习45 流成员函数put输出单个字符 cin输入流详解 get()函数读入一个字符相关推荐

  1. python函数中可变参数的传递方式_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  2. 函数柯里化的意义_详解JS函数柯里化

    第一次看到柯里化这个词的时候,还是在看一篇算法相关的博客提到把函数柯里化,那时一看这个词就感觉很高端,实际上当你了解了后才发现其实就是高阶函数的一个特殊用法. 果然是不管作用怎么样都要有个高端的名字才 ...

  3. (pytorch-深度学习系列)pytorch卷积层与池化层输出的尺寸的计算公式详解

    pytorch卷积层与池化层输出的尺寸的计算公式详解 要设计卷积神经网络的结构,必须匹配层与层之间的输入与输出的尺寸,这就需要较好的计算输出尺寸 先列出公式: 卷积后,池化后尺寸计算公式: (图像尺寸 ...

  4. C语言试题三十一之判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no。回文是指顺读和倒读都是一样的字符串。

    1. 题目 请编写函数function,该函数的功能是:判断字符串是否为回文?若是则函数返回1,主函数中输出yes,否则返回0,主函数中输出no.回文是指顺读和倒读都是一样的字符串. 2 .温馨提示 ...

  5. python函数定义及调用-python函数声明和调用定义及原理详解

    这篇文章主要介绍了python函数声明和调用定义及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数是指代码片段,可以重复调用,比如我们前 ...

  6. python函数声明和调用定义及原理详解

    这篇文章主要介绍了python函数声明和调用定义及原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 函数是指代码片段,可以重复调用,比如我们前 ...

  7. Keras深度学习实战(1)——神经网络基础与模型训练过程详解

    Keras深度学习实战(1)--神经网络基础与模型训练过程详解 0. 前言 1. 神经网络基础 1.1 简单神经网络的架构 1.2 神经网络的训练 1.3 神经网络的应用 2. 从零开始构建前向传播 ...

  8. 详解softmax函数

    详解softmax函数以及相关求导过程 忆臻 PHD Candidate(公众号机器学习算法与自然语言处理) 291 人赞了该文章 这几天学习了一下softmax激活函数,以及它的梯度求导过程,整理一 ...

  9. python命名空间和闭包_Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】...

    本文实例讲述了Python函数基础用法.分享给大家供大家参考,具体如下: 一.什么是命名关键字参数? 格式: 在*后面参数都是命名关键字参数. 特点: 1.约束函数的调用者必须按照Kye=value的 ...

最新文章

  1. Linux操作命令(四)
  2. 新基建7大产业链约500家企业图谱!
  3. mysql8创建用户并授权_新特性解读 | 从 wireshark 看 MySQL 8.0 加密连接
  4. sas 检测到开型代码语句的递归_对于标准答案的递归很多人都看不懂,其实就是一个深度优先的遍历。我写了段伪代码,将递归步骤还原并注释了一下,供大家参考,希望大家有所收获。...
  5. Spring Boot 在Gradle构建中使用Log4j日志
  6. 字节跳动联邦学习平台通过中国信通院首批评估 数据安全能力得到专业验证
  7. Repositories.EntityFramework 实现方式
  8. 前端小知识-html5
  9. 高教杯数学建模国赛论文模板+2013到2019年的国赛优秀论文+2020年数学建模论文心得---数学建模友友必看
  10. 煲机:让耳机的声音更动听!
  11. 华为员工频繁自杀原因何在?
  12. 掉头发厉害,是为什么呢?
  13. 精心整理了50个数据源网站(建议收藏)
  14. php 取出最后一数组元素,PHP取出数组中最后一个元素的方法汇总
  15. Java中resualtset,Java SafeEncoder類代碼示例
  16. DNS解析为什么不生效?DNS解析不生效原因分析
  17. Too many re-renders. React limits the number of renders to prevent an infinite loop
  18. Quartus II 13.1安装时出现的问题
  19. iconfont使用的三种方式(阿里巴巴矢量图标库代码使用)
  20. java 计算体积_Java抽象类计算体积

热门文章

  1. 关于eclipse与java version不兼容的问题
  2. 《互动教程 for Photoshop CC》已成功发布在App Store
  3. mysql crud,mysql的CRUD操作实现
  4. java8:新特性及Lamber表达式语法及四大函数接口
  5. codeforces 1520E Arranging The Sheep
  6. Android Studio开发:简单的登录注册界面
  7. 使用turtle绘制疫情加油图案
  8. django 发送邮件验证码
  9. 匿名上位机v2.6和V7自定义帧代码和飞控姿态代码
  10. 计算机关机慢怎么解决方法,电脑关机很慢,详细教您win7电脑关机很慢的解决方法...