本文几乎照搬http://www.cnblogs.com/luolizhi/p/5746775.html博客,只修改了一点点。不知道怎么转发过来,尴尬。。。

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

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;
void main()
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
system("pause");
}

注意:>> 是会过滤掉不可见字符(如 空格 回车,TAB 等) 
cin>>noskipws>>input[j];//不想略过空白字符,那就使用 noskipws 流控制

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

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


2、cin.get()

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

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

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

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

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

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

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

#include<iostream>
using namespace std;
void main()
{
cout<<"hello world"<<endl;
cin.get();//按下enter键结束
}
cin.get();

该语句的作用是舍弃回车,如果没有这条语句,“hello world”会在屏幕上一闪而过,肉眼无法看到;加上这句后,屏幕会等待用户按下回车键。


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

cin.getline(m,5):不断读取,直到遇到换行符(少于5个字符),在末尾加上一个空字符,换行符被丢弃
#include<iostream>
using namespace std;
void main()
{
char m[];
cin.getline(m, );
cout << m << endl;
system("pause");
}

输入: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(没遇到‘a’,到了指定个数终止),输入jkaljkljkl时,输出jk(遇到了‘a’,提前终止)

当用在多维数组中的时候,也可以用cin.getline(m[i],20)之类的用法:

#include<iostream>
using namespace std;
void main()
{
char m[][];
for (int i = ; i<; i++)
{
cout << "请输入第" << i + << "个字符串:";
cin.getline(m[i], );
} for (int j = ; j<; j++)
cout << "输出m[" << j << "]的值:" << m[j] << endl;
system("pause");
}


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

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

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


string头文件辨析

[C++ Primer Plus] 零散知识点(一)、输入函数(cin,cin.get,cin.getline等)+string头文件辨析的更多相关文章

  1. cin,cin.get(),cin.getline(),gets(),getchar()函数的用法

    1.cin>> 用法a:最基本的流输入用法,接受一个数字或字符,自动跳过输入的空格. 用法b:接受一个字符串,但是遇到除开头外的空格则会终止输入. #include<iostream ...

  2. ACM个人零散知识点整理

    ACM个人零散知识点整理 杂项: 1.输入输出外挂 //读入优化 int 整数 inline int read(){ int x=0,f=1; char ch=getchar(); while(ch& ...

  3. Android 零散知识点整理

    Android 零散知识点整理 为什么Android的更新试图操作必须在主线程中进行? 这是因为Android系统中的视图组件并不是线程安全的.通常应该让主线程负责创建.显示和更新UI,启动子线程,停 ...

  4. Android零散知识点积累

    本文仅在记录android开发中遇到的零散知识点,会不断更新... 目录 .隐藏系统标题栏 .图片尺寸及屏幕密度 3.获取顶部状态栏高度 1.隐藏系统标题栏 1)在资源文件styles.xml中定义样 ...

  5. C++中几个输入函数的用法和区别(cin、cin.get()、cin.getline()、getline()、gets()、getchar())

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

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

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

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

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

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

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

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

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

随机推荐

  1. nodejs + typescirpt + vs code

    参考: 基于Nodejs生态圈的TypeScript+React开发入门教程 NPM install -save 和 -save-dev 傻傻分不清 使用typescript开发node js Typ ...

  2. Python Pandas 时间序列双轴折线图

    时间序列pv-gmv双轴折线图 import numpy as np import pandas as pd import matplotlib.pyplot as plt n = 12 date_s ...

  3. 跨平台桌面程序框架Electron

    https://www.npmjs.com/ js库

  4. Nest js 使用axios模块

    文档 let r = await this.http.get(`https://api.github.com/users/januwA`).toPromise().then(v => v.dat ...

  5. CString 成员函数用法

    参考文档:http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391190.html CString的构造函数CString( );例:CStr ...

  6. 分析Hello2代码

    代码如下String username = request.getParameter("username"); if (username != null && us ...

  7. 15.2-uC/OS-III资源管理(信号量)

    1.信号量 信号量是一个“ 锁定机构”,代码需要获得钥匙才可以访问共享资源.占用该资源的任务不再使用该资源并释放资源时,其它任务才能够访问这个资源. 通常有两种类型的信号量:二值信号量和多值信号量. ...

  8. 13.0-uC/OS-III上下文切换

    1.当uC/OS-III转向执行另一个任务的时候,它保存了当前任务的CPU寄存器到堆栈.并从新任务的的堆栈中CPU寄存器载入CPU.这个过程叫做上下文切换. 上下文切换需要一些开支. CPU的寄存器越 ...

  9. 6、LwIP协议规范翻译——缓冲及内存管理

    6.缓冲及内存管理 在一个通信系统中,内存缓冲管理系统必须容纳各种大小的缓冲数据,其范围从包含具有数百个字节的数据的全尺寸TCP段到只有几个字节的短ICMP回复包.此外,为了避免拷贝,应该让数据内容缓 ...

  10. SparkML之推荐引擎(一)---电影推荐

    本文将使用 SparkML 来构建推荐引擎. 推荐引擎算法大致分为 基于内容的过滤.协同过滤.矩阵分解,本文将使用基于属于矩阵分解的 最小二乘法 算法来构建推荐引擎. 对于推荐引擎模块这里将分为两篇文 ...