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

来源:互联网 发布:linux 看cpu核数 编辑:程序博客网 时间:2024/04/28 21:20

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

链接:点击打开链接



1、cin>>          

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

复制代码
#include <iostream> 
using namespace std; 
main () 

int a,b; 
cin
>>a>>b; 
cout
<<a+b<<endl; 
}
复制代码

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

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

用法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()  

此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,

依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'。

其语法为:

cin.getline(字符指针(char*),字符个数N(int),结束符(char));


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'  。   可能有错默认'\n'

//如果将例子中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<string>”

复制代码
#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流,是不一样的两个函数

注意:在使用getline时有一个奇怪的现象,在vc6下, 要打两次回车才可以结束

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

复制代码
#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()因为可以接收空格,所以不会产生这个错误;

6、getchar()   //接受一个字符,需包含“#include<string>”

复制代码
#include<iostream> 
#include
<string> 
using namespace std; 
main () 

char ch; 
ch
=getchar(); //不能写成getchar(ch); 
cout<<ch<<endl; 
}
复制代码

输入:jkljkljkl 
输出:j

//getchar()是C语言的函数,C++也可以兼容,但是尽量不用或少用;

原文地址:http://hi.baidu.com/kskr/blog/item/cb00cc3deadf45c49f3d6279.html


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 韩国代购被海关扣了怎么办 爱奇艺开通自动续费忘了账号怎么办 小米手机云储存空间不足怎么办 路由器被黑了打不开网页怎么办 致人轻伤跑了怎么办 轻伤对方要30万怎么办 老公用老婆的钱怎么办 想注册个公司要怎么办 域名续费不知道找谁怎么办 代收快递弄丢了怎么办 货到付款的快递人不在怎么办 快递送货上门人不在怎么办 ems快递签收人不在怎么办 快递被别人取了怎么办 怎么办快递宗和收发点 快递电话写错了怎么办 网上买沙发想退货怎么办 买的电脑想退货怎么办 买了衣服想退货怎么办 天猫买药审核通过后不要了怎么办 京东维修无发票怎么办 京东维修没有发票怎么办 苹果6s外音没了怎么办 苹果6splus开不了机怎么办 顺丰快递寄件填错收件人地址怎么办 收快递电话换了怎么办 顺丰快递没人收怎么办 网购东西没收到怎么办 中通快递没收到怎么办 快递员不给验货怎么办 顺丰验货不要了怎么办 闲鱼买家掉包了怎么办 闲鱼正在退款中怎么办 拒收货物卖家拒绝退款怎么办 货物没问题淘宝卖家拒收怎么办 头发稀少长的慢怎么办 没满16岁怎么办银行卡 网上买东西手机号填错了怎么办 买东西电话号码填错了怎么办 淘宝联盟扣54分怎么办 联盟被扣54分怎么办