博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[C++]-C++基本输入及读取整行
阅读量:2055 次
发布时间:2019-04-28

本文共 1995 字,大约阅读时间需要 6 分钟。

文章目录

C++标准库提供了一组丰富的输入/输出功能。C++的I/O发生在流中,流是字节序列:

  • 如果字节流是从设备(如键盘、磁盘驱动器、网络连接等)流向内存,这叫做输入操作。
  • 如果字节流是从内存流向设备(如显示屏、打印机、磁盘驱动器、网络连接等),这叫做输出操作。

标准输入流

预定义的cin 是 iostream 类的一个实例。cin 对象附属到标准输入设备,通常是键盘;cin 与流提取运算符>>结合使用。

cin>>

cin默认使用空白(空格、制表符、换行符)来确定字符串的结束位置:

#include 
using namespace std;void testInput(){ int nAge; double height; string name; cout<<"Input Age, height, name: "; // 12 1.65 mike josn cin>>nAge>>height>>name; cout<<"Age: "<
<<", Height: "<
<<", Name: "<
<

读取name时,只读取前面一部分(因空格结束了字符串的读取)。

cn.get

cin.get()可以读取每个字符返回,也可把读取的内容放到字符参数中:

int_type get();basic_istream& get (char_type& c);

cin.get()依次读取每一个字符,直到结束(Ctrl+z):

void testGet(){    cout<<"Input: ";    int nGet;    while( (nGet=cin.get())!=EOF){ // 输入回车时,才依次读取(回车符本身也作为一个字符读取到        cout<<(int)nGet<

整行读取

std::getline可以读取一行放入string中,cin.get与cin.getline可以读取一行放入到字符数组中。

std::getline

std::getline从输入流中读取字符到string中,直到遇到分隔符(默认\n):

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

若指定分隔符(如设为空格),可用于字符串分割:

#include 
#include
using namespace std;void testLine(){ cout<<"Input: "; string strIn; std::getline(cin, strIn);// cout<

cin.getline

cin.getline从输入流中读取字符到字符数组,直到遇到分隔符(默认\n)或数组最大长度-1;末尾会自动添加NULL;通过gcount可获取读取字符数(包括分隔符):

basic_istream& getline (char_type* s, streamsize n );basic_istream& getline (char_type* s, streamsize n, char_type delim);

字符数组中不包含分隔符(且已从输入缓冲区中删掉了),但gcount包括分隔符(即:len(ary)+1):

char strIn[1024];    for(int i=0; i<5; ++i) {        cin.getline(strIn, 1024);        cout << "count: " << cin.gcount() << endl;    }

cin.get

cin.get从输入流中读取字符到字符数组,直到遇到分隔符(默认\n)或数组最大长度-1;末尾会自动添加NULL:

basic_istream& get (char_type* s, streamsize n);basic_istream& get (char_type* s, streamsize n, char_type delim);

cin.get读取时,会把分隔符留在缓冲区中,若不主动去掉,则会一直读取空字符串:

char strIn[1024];    for(int i=0; i<5; ++i) {        cin.get(strIn, 1024).get();    }

若没有后面的get(),则在读取一行后,后续一直读取空(因换行符还在缓冲区中)。

转载地址:http://kzilf.baihongyu.com/

你可能感兴趣的文章
Leetcode C++《每日一题》20200707 112. 路径总和
查看>>
云原生 第十一章 应用健康
查看>>
Leetcode C++ 《第202场周赛》
查看>>
云原生 第十二章 可观测性:监控与日志
查看>>
Leetcode C++ 《第203场周赛》
查看>>
云原生 第十三章 Kubernetes网络概念及策略控制
查看>>
《redis设计与实现》 第一部分:数据结构与对象 || 读书笔记
查看>>
《redis设计与实现》 第二部分(第9-11章):单机数据库的实现
查看>>
算法工程师 面经2019年5月
查看>>
搜索架构师 一面面经2019年6月
查看>>
稻草人手记
查看>>
第一次kaggle比赛 回顾篇
查看>>
leetcode 50. Pow(x, n)
查看>>
leetcode 130. Surrounded Regions
查看>>
【托业】【全真题库】TEST2-语法题
查看>>
博客文格式优化
查看>>
【托业】【新托业全真模拟】疑难语法题知识点总结(01~05)
查看>>
【SQL】group by 和order by 的区别。
查看>>
【F12】谷歌浏览器--前台效果可以在不访问服务器的前提下直接改样式看效果是否是预期值。...
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>