C++中有两个getline函数, cin.getline()与getline() 
这两个函数相似,但是 这两个函数分别定义在不同的头文件中。
 
cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

1.getline()是定义在<string>中的一个行数,用于输入一行string,以enter结束。

getline()的原型是istream& getline ( istream &is , string &str , char delim );
其中 istream &is 表示一个输入流,譬如cin;string&str表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);char delim表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。

函数原型:istream& getline ( istream &is , string &str , char delim );
is:istream类的输入流对象,譬如cin;
str:待输入的string对象,表示把从输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以);
delim:表示遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。

example 1:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
string fstr;
string lstr; int main(int argc, char* argv[])
{
cout<<"first str: \n";
getline(cin,fstr);
cout<<"last str: \n";
getline(cin,lstr); cout<<"first str:"<<fstr<<","<<"last str:"<<lstr<<endl;
system("pause");
return(0);
}

  

example 2:

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std; int main(int argc, char* argv[])
{
string line;
cout<<"please cin a line:";
getline(cin,line,'#');
cout<<endl<<"The line you give is:"<<line<<endl;
return(0);
}

  

2.cin.getline(char ch[],size)是cin 的一个成员函数,定义在<iostream>中,用于输入行指定size的字符串,以enter结束。若输入长度超出size,则不再接受后续的输入。

#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
char fstr[6] ;
char lstr[7]; int main(int argc, char* argv[])
{
cout<<"first str: \n";
cin.getline(fstr,6); cout<<"last str: \n"; cin.getline(lstr,7); cout<<"first str:"<<fstr<<","<<"last str:"<<lstr<<endl;
system("pause");
return(0); }

  

这里注意,如果在输入”first str“的时候,输入的字符数多余5个的话,会感觉到    cin.getline(lstr,7);  没有执行

如下图:

为什么呢,因为你输入进去的”wertyuioop”过长,cin函数出错了~

cin有一些函数进行错误处理。这里需要在“cin.getline(fstr,6);”后面加以下两行代码:

cin.clear();//清除错误标志
cin.ignore(1024,'\n');//清除缓存区数据

然后运行就会有了

关于cin出错以及解决方法还在整理中~整理好后放一个连接到这里来~

cin.getline()与getline()的更多相关文章

  1. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法----细节决定成败 (sort用法)

    C++中cin.cin.get().cin.getline().getline().gets()等函数的用法 学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有 ...

  2. c++中获取字符cin,getchar,get,getline的区别

    http://www.imeee.cn/News/GouWu/20090801/221298.html cin.get()与getchar()函数有什么区别? 详细点..C++中几个输入函数的用法和区 ...

  3. 日常笔记4关于cin、cin.get()、cin.getline()、getline()使用区别

    1.关于PAT中段错误 使用字符数组出现错误: char str[256]; 报错段错误,然后改用C++中的string 改成: string str; 同char数组一样,也可以使用下标来取单个字符 ...

  4. [原创]cin、cin.get()、cin.getline()、getline()、gets()、getchar()的区别

    这几个输入函数经常搞不清具体特点和用法,这里稍作总结 一.cin>> 1.最基本用法,输入一个变量值 2.输入字符串,遇“空格”.“TAB”.“回车”结束,比如输入“hello world ...

  5. C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: 注意:>> 是会过滤掉不可见的字符(如 空格 回车,TAB 等) cin>>noskipws> ...

  6. C++中cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行) 1.cin 2.cin.get ...

  7. cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息:1.cin1 ...

  8. [转载]cin、cin.get()、cin.getline()、getline()、gets()函数的用法

    1.cin>>           用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream>using namespace std;main ( ...

  9. (转)cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    学C++的时候,这几个输入函数弄的有点迷糊:这里做个小结,为了自己复习,也希望对后来者能有所帮助,如果有差错的地方还请各位多多指教(本文所有程序均通过VC 6.0运行)转载请保留作者信息:1.cin1 ...

随机推荐

  1. lintcode-423-有效的括号序列

    423-有效的括号序列 给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列. 样例 括号必须依照 "( ...

  2. 第11章 认识和学习bash

    认识bash这个shell 硬件.内核和shell 用户操作计算机流程如下: 用户——>用户界面(shell,KDE,application)——>核心(kernel)——>硬件(h ...

  3. PHP中与类有关的运算符

    与类有关的运算符: new, instanceof:判断一个“变量”(对象,数据),是否是某个类的“实例”: 示意如下: class  A {} class  B {} class  C extend ...

  4. 框架整合小小总结【SSH】注解式

    Spring 注解式注册 bean: 大致分为以下几步: 开启 context 空间支持 开启自动扫描功能,指定扫描包路径 使用注解配置 bean (使用@Component 注解) 给 bean 注 ...

  5. 使用 Maven 管理项目

    最近的练手项目使用的是 Maven 在管理项目,在使用 Maven 管理项目时,三层的开发时分模块开发的,parent-dao-service-web,所有的spring+struts + Hiber ...

  6. 【C++】new和delete表达式与内存管理

    new和delete表达式可以用来动态创建和释放单个对象,也可以用来动态创建和释放动态数组. 定义变量时,必须指定其数据类型和名字.而动态创建对象时,只需指定其数据类型,而不必为该对象命名.new表达 ...

  7. 【.Net】C# 根据绝对路径获取 带后缀文件名、后缀名、文件名、不带文件名的文件路径

    1.c#根据绝对路径获取 带后缀文件名.后缀名.文件名.   1 string str =" F:\test\Default.aspx"; 2 string filename = ...

  8. 【uoj#21】[UR #1]缩进优化 数学

    题目描述 给出 $n$ 个数 ,求 $\text{Min}_{x=1}^{\infty}\sum\limits_{i=1}^n(\lfloor\frac {a_i}x\rfloor+a_i\ \tex ...

  9. CF1093F Vasya and Array DP

    题面 题面 \(\Delta\)题面有点问题,应该是数列中没有长度大于等于\(len\)的连续数字才是合法的. 题解 设\(f[i][j]\)表示DP到\(i\)位,以\(j\)为结尾的方案数, \( ...

  10. BZOJ1187:[HNOI2007]神奇游乐园——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1187 Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现 ...