1. 输入输出的本质

C++中的输入输出都是通过流来进行的,而具体的输出输入都是通过对流进行操作来完成的,一般为定向一个流(重定向),清空流,向流里边添加新的元素。C++把输入输出看做字节流,输入时从字节流中抽取字节,输出时把字节插入到字节流中。

2.使用cin及其方法进行输入

  cin对象将标准输入表示为字节流,通常情况下用键盘来生成这种字节流,常用的cin输入发方法为cin>>abc;而istream类对抽取运算符进行了重载,是之可以识别这些基本类型,unsigned/signed char&, char&, short&, unsigned short&, int&,unsigned int&,long&, unsigned long&, long long &, unsigned long long &, float& double &, long double&;对于这些基本类型直接就用cin加抽取运算符>>就可以实现。有个问题就在于>>抽取符会跳过换行符且回忽略类似于空白,制表之类的字符,所以这样的一段程序是有问题的,这段代码里面的循环将会永远的跑下去,单纯地用这种方法进行对字符类数据的输入就出现了很大的问题。

而对于要输入一个字符串如果用cin>>input;这样的方法来输入一个字符串,则遇到空白换行,制表之类的,输入都会停止

 char a;
int times=;
cin>>a;
while(a!='\n')
{
cout<<a;
cin>>a;
times++;
}
cout<<times;

3. c++对字符串,字符,string类的输入//一下方法很好的解决了空白,换行等不被读取的情况。

  C++对字符串,字符和string类输入的时候常用的get(),getline()函数,他们被称为非格式化输入,因为他们只读取字符,包括空白 ,换行符, 制表符,等也不会进行数据转换,读到啥就是啥。

  在istream里边定义的get()函数与getline()函数:

用get进行单字符输入,在有参数或者没有参数的情况下,get函数读取一个输入字符,不管这个字符是啥换行,制表都可以,直接读进去。

  其中get(void)将字符转换成整形后返回,对于get(char&)函数返回一个指向的调用它的istream对象的引用,这样就可以使用类似于cin.get(a).get(b).get(c);的方式来读取,这其中要注意get不会忽略换行符,所以要注意换行符被不小心读进去的情况。

  如果读取倒了文件尾,或者键盘输入的尾部等没东西可读的情况的时候,cin.get(ch);会返回false,其余正常情况返回的都是true。

cin.get()与cin.get(ch)的比较
特征 cin.get(ch) ch=cin.get()
传输输入特征 直接赋值给ch 把函数返回值赋给ch
读取到字符之后函数返回至 指向istream对象的引用 字符编码,其实是int值
达到文件尾时函数的返回值 转换为false EOF

           注:键盘输入仿真的文件尾与真正的文件尾效果一样

get()函数

在istream中定义的get()函数一共有六项重载:使用的时候只要符合任意一种参数规则即可

1. int_type __CLR_OR_THIS_CALL get();//无参数,只读取一个字符,返回值为int型

2. _Myt& __CLR_OR_THIS_CALL get(_Elem *_Str, streamsize _Count);//接受两个参数,一个字符串首地址,一个int型的形参来控制最大读取字符数,为存放字符串末尾                                     //的/0,这个参数要比读取的字符串大一,该函数默认分界符为/n.

3. _Myt& __CLR_OR_THIS_CALL get(_Elem *_Str, streamsize _Count, _Elem _Delim);//与上边基本相同,不同之处在于这个函数分界符为自己定的_Delim.

4._Myt& __CLR_OR_THIS_CALL get(_Elem& _Ch);//接收参数为char型的引用,起作用就是把值直接赋给ch;

//在测试函数的时候有点发现,不能对字符串进行引用,因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

如果这块是  char &bbb = input[10]; //不能建立数组的引用。
                            //这块效果就是对input[0]进行引用。

5._Myt& __CLR_OR_THIS_CALL get(_Mysb& _Strbuf);

6._Myt& __CLR_OR_THIS_CALL get(_Mysb& _Strbuf, _Elem _Delim);//除第一个函数外其他函数返回值均为指向调用它的istream对象的引用。

以上函数在使用的时候都要主意只能使用cin.get(若干参数或者没有),get()函数在遇到换行符读取完字符时并不会读取换行符或者是本来的默认分界符,而这些东西都只会留在原始流之内,

char input[]
char ch;
cin.get(input,,'a');
cout << input << endl;
cin.get(ch);
cout<<ch<<endl;

输入sdsdsda

输出sdsdsd

  a

getline()函数

在istream之中的getline()函数一共两项重载

1.   _Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count);
 2.   _Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count, _Elem _Delim);

这两个函数类似于get()函数中的2 、3重载,其不同之处在于getline()函数会自动丢弃换行符等分界符。

char input[]
char ch;
cin.getline(input,,'a');
cout << input << endl;
cin.get(ch);
cout<<ch<<endl;

输入 sdsdsda

输出sdsdsd

因为丢弃分界符,则分界符a被丢弃,下面的cin.get(ch)读到的是换行符,所以输出的时候就只是输出一个换行符。

对string类的输入

单纯的应cin>>来输入一个string类字符串,则会在遇到空白,制表,换行等停止。

用getline()来读取string类, getline()在vs2010中函数定义在string文件中,共两个重构,且都为内联函数

1. template<class _Elem,
    class _Traits,
    class _Alloc> inline
    basic_istream<_Elem, _Traits>& getline(
        basic_istream<_Elem, _Traits>& _Istr,
        basic_string<_Elem, _Traits, _Alloc>& _Str,
        const _Elem _Delim)//使用的是自己定义的分界符,其参数为流定向类,第二个参数为输出目标string,第三个参数为自定义分界符

2. template<class _Elem,
    class _Traits,
    class _Alloc> inline
    basic_istream<_Elem, _Traits>& getline(
        basic_istream<_Elem, _Traits>& _Istr,
        basic_string<_Elem, _Traits, _Alloc>& _Str)//默认的分界符为\n

这两个函数都没有字符串字符数上限的参数,因为string类会自己自动根据字符串的大小来调整大小。

C++输入输出总结_输入的更多相关文章

  1. Mybatis输入输出映射_动态sql_关联关系(一对一、一对多、多对多)

    Mybatis输入输出映射_动态sql_关联关系(一对一.一对多.多对多)输入输出映射parameterType完成输入映射parameterType可以传入的参数有,基本数据类型(根据id查询用户的 ...

  2. Go语言标准库_输入/输出

    Go语言标准库_输入/输出 转载节选自<Go语言标准库> Reader 接口 type Reader interface { Read(p []byte) (n int, err erro ...

  3. Python基本语法_输入/输出语句详解

    目录 目录 前言 输入 raw_input input raw_input 和 input 的区别 输出 print print 基本格式化输出 print复杂格式化输出 flags标志位 width ...

  4. 04747_Java语言程序设计(一)_第9章_输入和输出流

    例9.1一个文件复制应用程序,将某个文件的内容全部复制到另一个文件. import java.io.*; public class Example9_1 { public static void ma ...

  5. ACM的奇计淫巧_输入挂

    什么是输入挂? 众所周知scanf比cin快的多,那么有没有比scanf更快的东西呢?答案就是输入挂,输入挂利用了告诉读取的函数getchar(),然后再人工处理成整数或浮点,比使用scanf快太多. ...

  6. 020_linux驱动之_输入子系统按键应用

    (一)分配一个输入子系统结构体 static struct input_dev *buttons_dev; /*分配一个input_dev结构体*/ (二)设置这个输入子系统需要的动作 /* 1. 分 ...

  7. 20200427_ls_正在读取目录_输入/输出错误

    环境: 在Centos7.2上挂载了一个2T的移动硬盘, 使用vim 在移动硬盘中编辑 .sh文件, wq的时候提示出错, 然后清空的文件, 可以正常wq出来 [root@localhost yido ...

  8. 编写Java程序_输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。

    要求说明: 输入本部门五位员工的薪资,并根据用户输入的序号为指定员工进行提薪.若用户输入序号出现越界,则提示错误. 运行效果如图: 实现代码: import java.util.Scanner; pu ...

  9. 编写Java程序_输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

    要求: 输入一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. 实现代码: package kaoshi; import java.util.Scanner; pu ...

随机推荐

  1. git ssh 配置

    创建并切换到 ~/.ssh(存在就直接切换过去) 运行 ssh-keygen 创建 rsa 文件 复制 .pub 的文件内容,添加到网站的公钥列表 Git\etc\ssh\ssh_config 中添加 ...

  2. Asp.Net Core2.0 基于QuartzNet任务管理系统

    Quartz.NET官网地址:https://www.quartz-scheduler.net/ Quartz.NET文档地址:https://www.quartz-scheduler.net/doc ...

  3. Netbeans简要配置许可证信息

    <#if licenseFirst??>${licenseFirst}</#if>${licensePrefix}Copyright (C) <2017>  < ...

  4. dubbox系列【四】——使用dubbo-monitor-x监控注册中心

    1.下载源码,编译成war包 源码下载地址为:https://git.oschina.net/yjmyzz/dubbo-monitor.git 在pom.xml文件所在目录,直接执行mvn packa ...

  5. 使用sed删除拼音的音调

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  6. yaf插件类的使用

    yaf插件类的使用大小写敏感的. "插件名Plugin"为插件类的名字,这样会自动标志着这是一个插件. application.directory string 应用程序的目录,包 ...

  7. qwe框架- CNN 实现

    CNN实现 概述 我在qwe中有两种,第一种是按照Ng课程中的写法,多层循环嵌套得到每次的"小方格",然后WX+b,这样的做法是最简单,直观.但是效率极其慢.基本跑个10张以内图片 ...

  8. 一句Python,一句R︱numpy、array——高级matrix

    先学了R,最近刚刚上手python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句python,对应写一句R. python中的numpy模块相当于R中的matirx矩 ...

  9. Hi3531用SPI FLASH启动 使用Nand做文件系统

    1.编译内核(可选) make ARCH=arm CROSS_COMPILE=arm-hisiv200-linux- menuconfig make ARCH=arm CROSS_COMPILE=ar ...

  10. R语言︱关联规则+时间因素=序贯关联规则

    序贯模型=关联规则+时间因素. 了解这个模型可以参考李明老师的<R语言与网站分析 [李明著][机械工业出版社][2014.04][446页]>,第九章,第二节的"序列模型关联分析 ...