C++中getline()、gets()等函数的用法详解

在学习C++的过程中,经常会遇到输入输出的问题,以下总结一下下面几个函数的用法:

1)、cin
2)、cin.get()
3)、cin.getline()
4)、getline()
5)、gets()

1、cin>>

  用法1:最基本,也是最常用的用法,输入一个数字:

 #include <iostream>
  using namespace std;
  main ()
  {
  int a,b;
  cin>>a>>b;
  cout<<a+b<<endl;
  }

  输入:2[回车]3[回车]
  输出:5

  用法2:接受一个字符串,遇“空格”、“TAB”、“回车”都结束

 #include <iostream>
  using namespace std;
  main ()
  {
  char a[20];
  cin>>a;
  cout<<a<<endl;
  }

  输入:jkljkljkl
  输出:jkljkljkl
  输入:jkljkl jkljkl //遇空格结束
  输出:jkljkl   

2、cin.get()

  用法1: cin.get(字符变量名)可以用来接收字符

 #include <iostream>
  using namespace std;
  main ()
  {
  char ch;
  ch=cin.get(); //或者cin.get(ch);
  cout<<ch<<endl;
  }

  输入:jljkljkl
  输出:j

  用法2:cin.get(字符数组名,接收字符数目)用来接收一行字符串,可以接收空格

 #include <iostream>
  using namespace std;
  main ()
  {
  char a[20];
  cin.get(a,20);
  cout<<a<<endl;
  }

  输入:jkl jkl jkl
  输出:jkl jkl jkl
  输入:abcdeabcdeabcdeabcdeabcde (输入25个字符)
  输出:abcdeabcdeabcdeabcd (接收19个字符+1个'\0')

  用法3:cin.get(无参数)没有参数主要是用于舍弃输入流中的不需要的字符,或者舍弃回车,弥补cin.get(字符数组名,接收字符数目)的不足.

3、cin.getline() // 接受一个字符串,可以接收空格并输出

  #include <iostream>
  using namespace std;
  main ()
  {
  char m[20];
  cin.getline(m,5);
  cout<<m<<endl;
  }

  输入:jkljkljkl
  输出:jklj

接受5个字符到m中,其中最后一个为'\0',所以只看到4个字符输出;

  如果把5改成20:

  输入:jkljkljkl
  输出:jkljkljkl
  输入:jklf fjlsjf fjsdklf
  输出:jklf fjlsjf fjsdklf

//延伸:
  //cin.getline()实际上有三个参数,cin.getline(接受字符串的看哦那间m,接受个数5,结束字符)
  //当第三个参数省略时,系统默认为'\0'
  //如果将例子中cin.getline()改为cin.getline(m,5,'a');当输入jlkjkljkl时输出jklj,输入jkaljkljkl时,输出jk
  当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:
 #include<iostream>
  #include<string>
  using namespace std;
  main ()
  {
  char m[3][20];
  for(int i=0;i<3;i++)
   {
   cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
   cin.getline(m[i],20);
   }
  cout<<endl;
  for(int j=0;j<3;j++)
  cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
  }

  请输入第1个字符串:

  kskr1

  请输入第2个字符串:

  kskr2

  请输入第3个字符串:

  kskr3

  输出m[0]的值:kskr1
  输出m[1]的值:kskr2
  输出m[2]的值:kskr3

4、getline() // 接受一个字符串,可以接收空格并输出,需包含“#include”

  

#include<iostream>
  #include<string>
  using namespace std;
  main ()
  {
  string str;
  getline(cin,str);
  cout<<str<<endl;
  }

  输入:jkljkljkl
  输出:jkljkljkl
  输入:jkl jfksldfj jklsjfl
  输出:jkl jfksldfj jklsjfl

  和cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数

5、gets() // 接受一个字符串,可以接收空格并输出,需包含“#include”

 #include<iostream>
  #include<string>
  using namespace std;
  main ()
  {
  char m[20];
  gets(m);  //不能写成m=gets();
  cout<<m<<endl;
  }

  输入:jkljkljkl
  输出:jkljkljkl
  输入:jkl jkl jkl
  输出:jkl jkl jkl

  类似cin.getline()里面的一个例子,gets()同样可以用在多维数组里面:

#include<iostream>
  #include<string>
  using namespace std;
  main ()
  {
  char m[3][20];
  for(int i=0;i<3;i++)
   {
   cout<<"\n请输入第"<<i+1<<"个字符串:"<<endl;
   gets(m[i]);
   }
  cout<<endl;
  for(int j=0;j<3;j++)
  cout<<"输出m["<<j<<"]的值:"<<m[j]<<endl;
  }

  请输入第1个字符串:

  kskr1

  请输入第2个字符串:

  kskr2

  请输入第3个字符串:

  kskr3

  输出m[0]的值:kskr1
  输出m[1]的值:kskr2
  输出m[2]的值:kskr3

  自我感觉gets()和cin.getline()的用法很类似,只不过cin.getline()多一个参数罢了;

  这里顺带说明一下,对于本文中的这个kskr1,kskr2,kskr3的例子,对于cin>>也可以适用,原因是这里输入的没有空格,如果输入了空格,比如“ks kr jkl[回车]”那么cin就会已经接收到3个字符串,“ks,kr,jkl”;再如“kskr 1[回车]kskr 2[回车]”,那么则接收“kskr,1,kskr”;这不是我们所要的结果!而cin.getline()和gets()因为可以接收空格,所以不会产生这个错误。

总结

以上所述是小编给大家介绍的C++中getline()、gets()等函数的用法详解,希望对大家有所帮助,也非常感谢大家对我们网站的支持!

时间: 2020-02-12

c++中的两种getline用法详解

getline是C++标准库函数:但不是C标准库函数,而是POSIX(IEEE Std 1003.1-2008版本及以上)所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准出来之前,则只是GNU扩展库里的函数).getline会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度. getline()函数是一个比较常见的函数.根据名字直接"望文->生义",就知道

老生常谈C++getline使用方法

一.心得 getline(cin,s); 多去看函数的使用默认说明 二.使用 getline(istream &in, string &s) 从输入流读入一行到string s • 功能: –从输入流中读入字符,存到string变量 –直到出现以下情况为止: • 读入了文件结束标志 • 读到一个新行 • 达到字符串的最大长度 –如果getline没有读入字符,将返回false,可用于判断文件是否结束 /* 3 */ #include <iostream> #include &l

基于C++ cin、cin.get()、cin.getline()、getline()、gets()函数的使用详解

1.cin 2.cin.get() 3.cin.getline() 4.getline() 5.gets() 6.getchar() 附:cin.ignore();  cin.get()//跳过一个字符,例如不想要的回车,空格等字符 1.cin>>          用法1:最基本,也是最常用的用法,输入一个数字: #include <iostream> using namespace std; main () {    int a,b;    cin>>a>&g

C++的get()函数与getline()函数使用详解

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

C++ cin.getline及getline()用法详解

下面先看下C++ cin.getline用法,具体内容如下所示: 使用 C++ 字符数组与使用 string 对象还有另一种不同的方式,就是在处理它们时必须使用不同的函数集.例如,要读取一行输入,必须使用 cin.getline 而不是 getline 函数.这两个的名字看起来很像,但它们是两个不同的函数,不可互换. 与 getline 一样,cin.getline 允许读取包含空格的字符串.它将继续读取,直到它读取至最大指定的字符数,或直到按下了回车键.以下是其用法示例: cin.getlin

C++ getline函数用法详解

虽然可以使用 cin 和 >> 运算符来输入字符串,但它可能会导致一些需要注意的问题. 当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格.制表符或换行符).一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取.以下面的语句为例: cin >> namel; 可以输入 "Mark" 或 "Twain",但不能输入 "Mark Twain",因为 cin 不能输入包含嵌入空格的字符串

基于C++中setiosflags()的用法详解

cout<<setiosflags(ios::fixed)<<setiosflags(ios::right)<<setprecision(2); setiosflags 是包含在命名空间iomanip 中的C++ 操作符,该操作符的作用是执行由有参数指定区域内的动作:   iso::fixed 是操作符setiosflags 的参数之一,该参数指定的动作是以带小数点的形式表示浮点数,并且在允许的精度范围内尽可能的把数字移向小数点右侧:   iso::right 也是se

C++ string.erase()用法详解

标准库类型string表示可变长的字符序列.可以通过string类的erase()函数来对该字符序列进行删除操作.erase()函数共有3种格式,分别用来删除指定位置的字符.删除指定长度的字符串和删除指定范围的字符串. 1.string.erase(pos,n) //删除从pos开始的n个字符 string.erase(0,1); 删除第一个字符 #include <string> #include <iostream> using namespace std; int main(

Oracle中游标Cursor基本用法详解

查询 SELECT语句用于从数据库中查询数据,当在PL/SQL中使用SELECT语句时,要与INTO子句一起使用,查询的 返回值被赋予INTO子句中的变量,变量的声明是在DELCARE中.SELECT INTO语法如下: SELECT [DISTICT|ALL]{*|column[,column,...]} INTO (variable[,variable,...] |record) FROM {table|(sub-query)}[alias] WHERE............ PL/SQL

JSP 中request与response的用法详解

JSP 中request与response的用法详解 概要: 在学习这两个对象之前,我们应该已经有了http协议的基本了解了,如果不清楚http协议的可以看我的关于http协议的介绍.因为其实request和response的使用大部分都是对http协议的操作. request对象的介绍 我们先从request对象进行介绍: 我们知道http协议定义了请求服务器的格式: 请求行 请求头 空格 请求体(get请求没有请求体) 好了,这里我们就不详细介绍了,我们只看几个应用就可以了,没什么难度: 应

Require.js的基本用法详解

一:什么是require.js ①:require.js是一个js脚本加载器,它遵循AMD(Asynchronous Module Definition)规范,实现js脚本的异步加载,不阻塞页面的渲染和其后的脚本的执行,并提供了在加载完成之后的执行相应回调函数的功能: ②:require.js要求js脚本必须要实现模块化,即文件化:而require.js的作用之一就是加载js模块,也就是js文件. ③:require.js可以管理js模块/文件之间的依赖;即不同的框架例如Jquery,Angul

JSP中EL表达式的用法详解(必看篇)

EL 全名为Expression Language EL 语法很简单,它最大的特点就是使用上很方便.接下来介绍EL主要的语法结构: ${sessionScope.user.sex} 所有EL都是以${为起始.以}为结尾的.上述EL范例的意思是:从Session的范围中,取得 用户的性别.假若依照之前JSP Scriptlet的写法如下: User user =(User)session.getAttribute("user"); String sex =user.getSex( );