C++输入输出流

要点

  • cin>> 最常见的是获取输入的一个字符或数字。cin>>会自动过滤掉不可见字符(如空格、换行、回车等)
  • get(c) 用来接收字符,只获取一个字符,可以接收空格、换行、回车,遇回车结束。
  • cin.get(数组名,接收字符数目) 用来接收字符串,可以接收空格,遇回车结束。由于字符串最后一个字符是'\0',所以当输入中超过len-1个字符时,实际只能接受len-1个字符。
  • cin.get() 没有参数。主要用于舍弃输入流中不需要的字符,或者舍弃回车,即舍弃输入流中的一个字符。
  • cin.getline(接收字符串到m,接收个数n,结束字符) 接收一个字符串,可以接收空格等,最后一个字符为‘\0’。结束符可以通过设置第三个参数自己设置,默认是回车。m不能为string类型。
  • cin.peek() 其返回值是一个char型的字符,其返回值是指针指向的当前字符,但它只是观测,指针仍停留在当前位置,并不后移。如果要访问的字符是文件结束符,则函数值是EOF( - 1)
int main() {
    char c;
    char buf[10];
    c = cin.peek();
    if (c > '0'&&c < '9') {
        cin >> buf;
        cout << buf << endl;
    }
    else {
        cout << "first char is not number" << endl;
    }
}

peek

  • cin.putback() 作用是将前面用get或者getline函数从输入流中读取的字符ch返回到输入流,插入到当前指针的位置,供后面读取。
int main() {
    char c;
    char buf[10];
    cout << "input word:" << endl;
    c = cin.get();
    if (c > '0'&&c < '9') {
        cin.putback(c);
        cin >> buf;
        cout << buf;
    }
    else {
        cout << "first char is not number" << endl;
    }
    return 0;
}

3.png

4.png

示例

#include "iostream"
using namespace std;

int main()
{
    char a, b, c;
    //cin>>会过滤不可见字符(空格、回车、换行)。
    cin >> a >> b >> c;
    cout << "a=" << a << ",b=" << b << ",c=" << c << endl;
    char buf[10];
    cin >> buf;
    cout <<"[cin >> buf]="<< buf << endl;
    char d;
    //接收一个字符
    cin.get(d);
    cout << "[get(d)]=" << d << " "<<(int)d<<endl;
    //舍弃流中的一个字符(包括空格、回车、换行)
    cin.get();
    //用来接收字符串,可以接收空格,遇回车结束。
    //数组的最后一个字符会是‘\0’
    cin.get(buf,10);
    cout <<"[cin.get(buf,10)]=" <<buf << endl;
    //cin.getline(接收字符串到m,接收个数n,结束字符)。
    //可以接受(空格、回车、换行)
    cin.getline(buf, 10);
    cout <<"getline(buf, 100)="<< buf << endl;
    return 0;
}

测试结果

测试结果

输入方式,这里为了区分开始和结束,使用[ ]来演示,而不是输入内容

  • [ 1 2 3 回车] 这时候1,2,3分别设置到了a,b,c中。证实了<<会过滤掉不可见字符
  • [4 回车]
    • buf的内容为4;
    • cin.get(d)后,d的结果为空格(从ASCii值可知);
    • cin.get()吸收了回车;
  • [123456789123]
    • get(buf,10)后buf的内容为123456789说明只能接受10-1个字符,最后一个为'\0'。
    • getLine(buf,10)接收剩余的字符。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏顶级程序员

十条Python面试题陷阱,看看你是否会中招

每年的3-4月份是跳槽的高峰期,无论是应聘Python web开发,爬虫工程师,或是数据分析,还是自动化运维,都涉及到一些基础的知识!我挑了一些Python的基...

1352
来自专栏余林丰

int类型和byte类型的强制类型转换

今天在读《Java网络编程》这本书的第二章 流 时,看到书中有一个地方关于int强制转换为byte类型时应注意的地方。这个地方有点细节,不过就应该把这种细节把握...

2075
来自专栏抠抠空间

Django 2.0 新款URL配置详解

Django2.0发布后,很多人都拥抱变化,加入了2的行列。 但是和1.11相比,2.0在url的使用方面发生了很大的变化,下面介绍一下:

2665
来自专栏黑白安全

PHP中echo,print,print_r,var_dump有什么区别

1.echo输出字符串或者数字,接受参数列表,不是函数,没有返回值。如果只是输出,echo更快

853
来自专栏无所事事者爱嘲笑

React事件绑定几种方法测试

1983
来自专栏Coding迪斯尼

eactjs开发自制编程语言Monkey的编译器:高能技术干货之语法高亮2

1415
来自专栏java闲聊

Shell入门

a. 单引号(括起来的字符都作为普通字符出现。特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释)

1314
来自专栏xiaoxi666的专栏

C++ 中的 delete[] 机制剖析

本文简单总结了delete[]放在析构函数中VS放在主函数中的区别(针对自己定义类)。

1883
来自专栏xingoo, 一个梦想做发明家的程序员

结构体的优化声明

声明一个结构体的时候,因为考虑到内存的对齐。例如,int型的变量,需要4个字节,那么它在存储的时候就需要在地址能够被4个字节整除的地方开始申请。 例如我们申请下...

18210
来自专栏一个会写诗的程序员的博客

Shell 极简教程Hello World变量函数运算符字符串数组for 循环if elseShell test 命令

注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

961

扫码关注云+社区

领取腾讯云代金券