C++IO关于cin>>和getline的理解

这个问题困扰了我有一段时间了,趁着十一放假有时间,仔细研究了一下

首先来看一下输入输出运算符cin>>的构成:cin和>>

cin>>是由两部分构成的,cin和>>,其中cin是输入流istream类的一个对象,隶属于iostream函数库

而>>则是运算符:这个运算符的作用是:从左侧cin对象中读取数据,并将它赋给右侧的运算对象

    大体的大概说完了,接下来就是干货了!!

....................................................

cin>>这个表达式应该分为两部分来看:cin 和>>

其中cin仅仅是一个istream对象!!!它的值反映的是当前输入流的状态:即cin对象接下来能否进行输入操作(能否从cin对象中读取数据)

cin对象实际上面向两方面的功能:

    1.外部设备与cin之间:这部分对于程序员来说是透明的

      设备(键盘)对它的修改,即通过设备直接修改cin对象,通过这个可以直接修改cin对象的状态(能否从cin对象中读取数据)

    2.cin和内存(各种对象,变量)之间:

      将cin中的数据读取出来,并赋予各种对象,变量

    而这两方面的功能都不由cin对象完成,cin对象实际上只是一个状态数据量,1功能有外设(键盘)完成,2功能由<<和getline等等运算符完成

................................................

有了上面的对cin对象全方面的了解,接下来对>>运算符的分析就手到擒来了

    >>运算符的作用实际上就是从cin对象中读取数据,并将数据赋予给右侧的各种对象或者变量,也就是上述的第2部分的功能了

     那么>>运算符有哪些特性呢?毕竟输入输出总得控制开始和结束吧

      1.>>运算符是由右侧的数据类型定义的,右侧的数据类型不同,重载的>>也不同

      2.>>运算符是向左结合的

      3.>>运算符从cin对象中读取数据时:如果遇到空格或者换行符号,那么这次读取数据结束,将空格之前的数据赋给右侧的运算对象,相应的,读取的第一个符号,也是空格或者换行符之后的第一个有效数据

      4.一个>>运算符一次只能读取一次(一个)数据,要想读取多个数据,只能再加>>运算符

......................................................................


好吧,以上4个,就是>>的性质了,那么有些人又要问了,那么Ctrl+Z(~Z)文件结束符号又是怎么一回事呢?

其实这个文件结束符和>>完全就是风马牛不相干,有些人总是将Ctrl+z和>>联系在一起

      文件结束符号:就是cin对象功能一中的一个性质!也就是说,你可以把文件结束符看成是外设的功能:

      一旦从外设中遇到文件结束符(或者是无效的输入),cin对象的状态就会变为假!!,也就是说外设多不能向cin对象写值了!!!

      自然<<运算符号就无效了

.......................................................

主体的知识已经讲完了,说穿了,就是要理解,cin对象其实是面向两方面的功能,要分清楚这两方面的功能对应的各种情况

 

...........

接下来是一点补充

又有人又会问,那么getline又是什么鬼呢?

其实geline没什么神秘的,它只不过是一种特殊的cin罢了

特殊体现在:

    1.它是String对象定义的,只能string对象用(当然<<也是String对象重载的)

    2.getline遇到空格不结束!!!也就是说它可以从cin对象中读取空格!!当然,遇到换行仍然结束,但是他也会读取换行符,但是读取换行符之后后停止读取,然后将读取的数据(此时包括换行符)赋给右侧的运算对象(x,见下),赋值的时候,丢弃换行符!!!,也就是说换行符不存到x中

getline的返回值是流参数和cin>>表达式一样,返回cin>>

    3.getline是一个函数的形式:

    调用如下:

  string x;

  getline(cin ,x);返回值为cin的状态

          

时间: 2024-12-21 08:20:40

C++IO关于cin>>和getline的理解的相关文章

cin 和 getline 混用中需要注意的问题

这段时间在刷题过程中遇到一个cin和getline混合使用中的问题,解决之后记录如下: 先来看一段代码 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 int main() { 6 string str; 7 int n = 0; 8 cin >> n; 9 cout << "num: " << n << endl; 10 w

string 类型的输入操作符 cin 和 getline 函数分别如何处理空白字符?

string用来读取一个word : string 类型的输入操作符 cin 对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中). getline 函数用来读取整行文本,接受两个参数:一个输入流对象和一个 string 对象,例如 getline(cin,line): getline 函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在

C++中的cin、getline()、get()。

cin是C++中常用的一种输入方式,通常与>>运算符结合使用,解释为从输入流中抽取出字符存入到想要保存的变量中. eg: #include <iostream> using namespace std; int main() { char name[20]; cout << "Enter your name: " << endl; cin >> name; cout << "your name is: &

20140923 cin.get() getline cin

#include<iostream> #include<string> using namespace std; int main() {     string title;     getline(cin,title);//读取输入队列中的回车,但是丢弃不存储在title中     //cin>>title;//不读取输入队列中的回车,回车仍然在输入队列中     char a=cin.get();//读取输入队列中多余的回车 }

P1308 统计单词数(cin,getline() ,transform() )

题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置.注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1 ),如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2 ). 输入格式 共 2 行. 第 1 行为一个字符串,其中只含字母

C++ 中的 cin/cin.get()/cin.getline()/getline/getchar()

在C++中有关从终端中输入数据的函数的理解一直比较模糊,写在这里面来分享给大家,并且方便自己以后查阅. 我一般在写C++程序的时候都会在头文件中引入iostream, cstdio, cstring, cmath这几个文件,以便方便后面相关库内函数的应用.下面,将按照顺序介绍这些函数. 1. cin cin是从文件输入流中取出一个int/char/string等.最简单的用法是输入一个数字,即 #include <iostream> using namespace std; main () {

缓冲区 cin() getline() getchar()

程序的输入都建有一个缓冲区,即输入缓冲区.一次输入过程是这样的,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin函数直接从输入缓冲区中取数据.正因为cin函数是直接从缓冲区取数据的,所以有时候当缓冲区中有残留数据时,cin函数会直接取得这些残留数据而不会请求键盘输入 一. cin>> 该操作符是根据后面变量的类型读取数据. 输入结束条件 :遇到Enter.Space.Tab键. 对结束符的处理 :将\n类似的结束符落在缓冲区里. 所以会有如下的程序和结果: #include <

cin 不能直接读入空格,可以用getline(PAT统计字符数)

#include <iostream>#include <cstring>using namespace std; int main(){    string str;    int a[200] = {0};    //    cin >> str;    getline(cin, str);    for(int i = 0; i < str.length(); i++){        if(str[i] >= 'a' && str[i

C++:cin、cin.getline()、getline()的用法

主要内容: 1.cin用法 2.cin.getline()用法 3.getline()用法 3.注意的问题 一.cin>> 用法1:输入一个数字或字符 #include <iostream>using namespace std;main (){int a,b;cin>>a>>b;cout<<a+b<<endl;} 用法2:接收一个字符串,遇“空格”.“TAB”.“回车”就结束 #include <iostream>usi