cin.getline():C++读入一行字符串(整行数据)
getline() 是 istream 类的成员函数,它有如下两个重载版本:
istream & getline(char* buf, int bufSize);
istream & getline(char* buf, int bufSize, char delim);
个版本从输入流中读取 bufSize-1 个字符到缓冲区 buf,或遇到\n为止(哪个条件先满足就按哪个执行)。函数会自动在 buf 中读入数据的结尾添加\0。第二个版本和个版本的区别在于,个版本是读到
\n为止,第二个版本是读到 delim 字符为止。\n或 delim 都不会被读入 buf,但会被从输入流中取走。这两个函数的返回值就是函数所作用的对象的引用。如果输入流中
\n或 delim 之前的字符个数达到或超过 bufSize,就会导致读入出错,其结果是:虽然本次读入已经完成,但是之后的读入都会失败。从输入流中读入一行,可以用个版本。用
cin >> str这种写法是不行的,因为此种读法在碰到行中的空格或制表符时就会停止,因此就不能保证 str 中读入的是整行。个版本的 getline 函数的用法示例如下:
#include <iostream>
using namespace std;
int main()
{
char szBuf[20];
int n = 120;
if(!cin.getline(szBuf,6)) //如果输入流中一行字符超过5个,就会出错
cout << "error" << endl;
cout << szBuf << endl;
cin >> n;
cout << n << endl;
cin.clear(); //clear能够清除cin内部的错误标记,使之恢复正常
cin >> n;
cout << n << endl;
return 0;
}
程序的运行过程如下:
ab cd↙
ab cd
33↙
33
44↙
44
在上面的输入情况下,程序是正常的。程序运行过程中还可能出现如下情况:
ab cd123456k↙
error
ab cd
120
123456
第 7 行,读入时因字符串超长导致出错,于是第 11 行并没有从输入流读入 n,n 维持了原来的值 120。第 12 行,调用 istream 的成员函数 clear() 清除 cin 内部的错误标记,此后 cin 又能正常读入了。因此,123456 在第 13 行被读入 n。
可以用 getline() 函数的返回值(为 false 则输入结束)来判断输入是否结束。例如,要将文件 test.txt 中的全部内容(假设文件中一行最长有 10 000个字符)原样显示,程序可以如下编写:
#include <iostream>
using namespace std;
const int MAX_LINE_LEN = 10000; //假设文件中一行最长 10000 个字符
int main()
{
char szBuf[MAX_LINE_LEN + 10];
freopen("test.txt", "r", stdin); //将标准输入重定向为 test.txt
while (cin.getline(szBuf, MAX_LINE_LEN + 5))
cout << szBuf << endl;
return 0;
}
程序每次读入文件中的一行到 szBuf 并输出。szBuf 中不会读入回车符,因此输出 szBuf 后要再输出 endl 以换行。
- 随机文章
- 核心危机(核心危机魔石合成攻略)
- 风儿(风儿轻轻的吹)
- 饿了么红包怎么用(饿了么红包怎么用微信支付)
- 光遇花手先祖位置(安卓光遇手花先祖)
- 广州4a广告公司(广州4a广告公司创意总监年薪)
- 抖音卡(抖音卡顿怎么解决)
- xboxones(xboxone手柄怎么配对主机)
- 兵马俑(兵马俑介绍和历史背景)
- 陈武简历
- 帆船比赛(帆船比赛视频)
- 海猫鸣泣之时游戏(海猫鸣泣之时游戏在哪玩)
- 韩国媳妇和小雪(韩国媳妇和小雪的父亲工资是多少)
- 儋州市第二中学(儋州市第二中学录取分数线)
- 鬼泣5攻略(鬼泣5攻略第三关怎么跳)
- 地球日主题(2020年世界地球日主题)
- 和柳亚子(和柳亚子先生于田)
- 冰客(冰客果汁)
- yy魔兽(yy魔兽世界)
- 国外成人游戏(国外成人游戏注册需要visa信用卡)
- 充值卡代理(充值卡代理加盟)
- 拆奶罩
- 郭妮小说(恶魔的法则郭妮小说)
- 杭同(杭同培训中心怎么样)
- 大松电饭煲(美的大松电饭煲)
- 服饰加盟(服饰加盟店招商)
- 疯狂填字(疯狂填字5)
- 点对点短信息(点对点短信息费是什么意思)
- 观音普门品(观音普门品念诵全文)
- 河北省大运会(河北省大运会时间)
- 哈利波特官网(哈利波特官网在哪里)
