getline()函数是一个比较常见的函数。根据名字直接"望文->生义",就知道这个函数是来完成读入一行数据。

下面就对C++ -- getline()函数的用法说明,以及getline()函数作为while条件的问题,总结一下:

在C++中本质上有两种getline函数,(称为第一种)一种在头文件<istream>中,是istream类的成员函数。

(称为第二种)一种在头文件<string>中,是普通函数。

1///

第一种: 在<istream>中的getline()函数有两种重载形式:

istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );

作用是: 从istream中读取至多n个字符(包含结束标记符)保存在s对应的数组中。即使还没读够n个字符,

如果遇到delim或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。

*例程代码:

#include "stdafx.h"

#include <iostream>

//使用标准输入流和标准输出流。

// std::cin ;  std::cout ;  std::endl

int main()

{

char name[256], wolds[256];

std::cout << "Please input your name: ";

std::cin.getline(name, 256);

std::cout << "Please input your wolds: ";

std::cin.getline(wolds, 256);

std::cout << "The result is:   " << name<< ", " << wolds<< std::endl;

std::cout << std::endl;

return 0;

}

//**输入:

Mr. Ling

You are wonderful !

//输出:

Mr. Ling, You are wonderful !

*通过字数限制和设置终止符修改的代码:

int main()

{

char name[6];

std::cout << "Please input your name: ";

std::cin.getline(name, 6, '#');

std::cout << "The result is:   " << name<< std::ends;

std::cout << std::endl;

return 0;

}

//**输入: //streamsize限定,截断输出

wonderful

//输出:

wonde

//**输入: //所设置的结束标识符,截断输出

won#derful

//输出:

won

第二种: 在<string>中的getline函数有四种重载形式:

istream& getline (istream&  is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream&  is, string& str);

istream& getline (istream&& is, string& str);
用法和上第一种类似,但是读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。

函数的变量:

is    :表示一个输入流,例如cin。

str   :string类型的引用,用来存储输入流中的流信息。

delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。

*例程代码:

#include "stdafx.h"

#include <iostream>

#include <string>

int main()

{

std::string name;

std::cout << "Please input your name: ";

std::getline(std::cin, name);

std::cout << "Welcome to here!" << std::ends<< name << std::endl;

std::cout << std::endl;

return 0;

}

在输入时,直至遇到‘\n’或EOF, 才终止输入操作。

//**输入:

wonderful

//输出:

wonderful

*例程代码:

nt main()

{

std::string name;

std::cout << "Please input your name: ";

std::getline(std::cin, name, '#');

std::cout << "Welcome to here!" << std::ends<< name << std::endl;

std::cout << std::endl;

return 0;

}

//**输入:

wonderful#Mr.Ling

//输出:

wonderful

2///

(EOF是C语言中为了区分有效数据和输入结束符的。

EOF的输入由系统锁定。windows下是ctrl+z,linux/unix下是ctrl+d。)

getline不是C库函数,而是C++库函数。它遇到以下情况发生会导致生成的本字符串结束:

(1)到文件结束,(2)遇到函数的定界符,(3)输入达到最大限度。

getline()函数在while中作为条件判断。

#include "stdafx.h"

#include <iostream>

#include <string>

using namespace std;

int main()

{

string line;

while (getline(cin, line))

cout << line << endl;

return 0;

}

大家会发现运行时一般的输入都不能够跳出循环,可能有时还会出现莫名的错误。但是这到底是什么原因造成的呢!下面就来分析一下:

getline()函数的原型是istream& getline ( istream & is , string & str , char delim );

int main()

{

string line;

cout << "Please input a line: " << endl;

while (getline(cin, line,'#'))

cout << line << endl;

return 0;

}

然后,那么当我们输入 "You are wonderful!#Mr. Ling"时,但是,有效的输入是 "You are wonderful!",#后面的内容并没有存入。程序运行的结果如:

//输入:

You are wondreful!#LingKing

//输出:

You are wonderful!

在这里设置‘#’为终止符时,当再输入’\n’时也不会影响。在#之前的内容都会照样输出。例如:

//输入: //含有’\n’的输入

Hello world!

You are wonderful!

Mr. Ling#wonderful!

//输出: //照样输出

Hello world!

You are wonderful!

Mr. Ling

通过getline()函数一个小小的实例,那么把getline()函数作为while的判断语句会怎么样的呢!

就分析一下while(getline(cin,line))

(注意:这里默认回车符停止读入,按Ctrl+Z(Windows)(Ctrl+D(Linux))或键入EOF(参考MSDN)回车即可退出循环。)

这个语句中,while判断语句的真实判断对象是cin的状态,也就是判断当前是否存在有效的输入流。

而输入流是对象,判断的是流返回的状态。所以正常的情况下,你怎么输入都是跳不出它的循环。

在这之中可能会用些同志误以为while判断语句的判断对象是line(也就是line是否为空),想通过回车来跳出循环,却发现不能跳出循环。

而回车和设置的终止符都是终止getline()函数的读取操作的。但是while判断语句判断的是getline()函数的输入流是否有效。所以呢!

C++ getline()函数的用法相关推荐

  1. getline函数的用法

    getline函数的用法     原文链接:https://blog.csdn.net/MisterLing/article/details/51697098 在C++中本质上有两种getline函数 ...

  2. C语言getline函数CSDN,c++中的两种getline用法详解

    getline是C++标准库函数:但不是C标准库函数,而是POSIX(IEEE Std 1003.1-2008版本及以上)所定义的标准库函数(在POSIX IEEE Std 1003.1-2008标准 ...

  3. C++ 多种定义的getline函数使用

    getline()函数是一个比较常见的函数.根据名字直接望文生义,就知道这个函数是来完成读入一行数据. 下面就对C++ – getline()函数的用法说明,以及getline()函数作为while条 ...

  4. 电话号码查询(getline函数)

    问题: 输入是某电话公司的若干客户姓名及电话号码,中间用逗号分隔,然后是若干要查询的客户姓名,输出是这些查询的客户姓名及其电话. 输入: 第一行是一个正整数n(不超过100000),表示某电话公式的客 ...

  5. 转载://C++中getline()、gets()等函数的用法

    在学习C++的过程中,经常会遇到输入输出的问题,以下总结一下下面几个函数的用法: 1).cin 2).cin.get() 3).cin.getline() 4).getline() 5).gets() ...

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

    转载,并经过本人补充 cin.cin.get().cin.getline().getline().gets()等函数的用法 2007/10/27 22:51 学C++的时候,这几个输入函数弄的有点迷糊 ...

  7. C++中getline()、gets()等函数的用法

    在学习C++的过程中,经常会遇到输入输出的问题,以下总结一下下面几个函数的用法: 1).cin 2).cin.get() 3).cin.getline() 4).getline() 5).gets() ...

  8. C++ getline函数用法

    转载自:https://www.cnblogs.com/xiaofeiIDO/p/8574042.html ** C++ getline函数用法 ** 在C++中本质上有两种getline函数: 第一 ...

  9. 【C++】getline函数用法

    cin在输入空格的时候会自动结束输入.相比之下,getline的优点就是在输入字符串的时候可以输入空格.与此同时也有很多种用法. 用法一.getline() #include<iostream& ...

最新文章

  1. 裸眼3D将是未来移动端的显示的主要技术
  2. 铁血规则:事件预订与取消预订[转]
  3. 机器学习:从入门到晋级
  4. 医院大数据中心建设要点分析
  5. python黑帽子学习中的疑难-(一)取代netcat
  6. 大牛讲堂 | 深度学习Sequence Learning技术分享
  7. Axis2+Rampart(WSS4J)实现UsernameToken认证方式的WS-Security(基于SOAP的Web安全调用机制)
  8. compass watch出错
  9. 【三维激光扫描】第二章:国内外三维激光扫描设备简介
  10. LDA(Latent Dirichlet Allocation)主题模型
  11. Spring详解一号IOC京都大火篇
  12. android 小米手机播放短小音频无声音问题
  13. 使用Qt开发的优秀软件汇总
  14. 操作系统用户接口与计算机接口有什么区别,1.操作系统既是硬件与其他软件的接口,又是用户与计算机之间的接口。...
  15. Android 使用ViewPager实现基本的翻页效果
  16. 使用diagrams.net(draw.io)绘制思维导图
  17. Android Studio update失败问题 some conflicts were found in the installation area
  18. 使用认知UX设计原则对认知可及性的adhd阅读障碍观点
  19. 【产品经理】手绘风格在网页设计中的运用
  20. 如何给女朋友讲明白:Java中Stack(栈)与Heap(堆)

热门文章

  1. 在安卓手机安装Linux
  2. CSMA/CD技术详解
  3. Linux 部署 nginx(下载、安装、启动)
  4. 跟艾文学编程《零基础入门学Python》(1)Python 基础入门
  5. Java从输入中读取一个数组
  6. 使用docker engine 运行时 集群部署 kubernetes v1.23
  7. Discuz验证码功能解析
  8. 分享10大自动化测试框架,你用过几个?
  9. 乌丹一中2021高考成绩查询,2021年赤峰高考状元名单公布,赤峰文理科状元是谁多少分...
  10. SpringBoot整合xxjobl