关于C++的cin.get()的问题

来源:互联网 发布:vb中format是什么意思 编辑:程序博客网 时间:2024/05/18 18:18

来自百度知道的一段文字

cin.get()函数本身就是输入一个字符的。比如:


char s[20];

 cin.get(s);就会出现编译错误,


改成;char s;

 cin.get(s);

就对了

关于cin.get()与cin>>s;的区别就是前者不会忽略空格,回车键,、会把他们当作字符了处理,如:cin.get(s);要是输入:空格a,那里,字符变量s的值就是一个空格,字符a则会存在缓冲区了。要是用cin>>s,它会忽略空格、、、直到有字符输入为止。如;输入:空格a,那么字符变量s的值就是‘a’了。


举例:

1、cin>>         


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


#include<iostream>

using namespace std;

main ()

{

int a,b;

cin>>a>>b;

cout<<a+b<<endl;

}


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

输出:5


用法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()   //接受一个字符串,可以接收空格并输出


#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 fjlsjffjsdklf 

 

一个关于cin.get的用法问题

问题:下列程序中,为什么第二次cin。get()不能用??


#include<iostream.h> 

void main() 

char ch; 

ch=cin.get();//读入一个大写字符 

ch=ch+32;//通过ascii码把大写的字母转化为小写的/*-------小写的ascii码比大写的大32; 

cout<<ch<<endl; 

char num; 

num=cin.get();//读入字符类型的 

int a; 

a=num-48; 

cout<<a<<endl; 





最佳答案:回答者:mhaha 


你运行时想输入A,会按A回车,cin.get()会把回车('\n')当作字符(num)读了,然后`````` 

char ch; 

cin>>ch; 

char num; 

cin>>num; 

这样(>>)会跳过回车符或者空格 

 

 cin.get()是保留回车在输入流队列中的.而cin是丢弃回车的.

ch=cin.get();是第一次输入,因为是刚开始,所以没有回车保留在输入流的队列中.这时你输入一个字符,然后回车.get()收到回车或空格或制表符就停止输入了.此时,输入流队列中留下一个回车.

num=cin.get();这是第二次输入.因为第一次用了get,所以输入流队列中有个回车.则get()接受这个回车.又因为get()收到回车或空格或制表符就停止输入.所以这一次的输入就是一个回车.

可以num=cin.get();之前把回车给弄了.你应该想到了.就用cin.get();把第一次输入留下的回车给弄走.则num=cin.get()就可以正常了.



 

原创粉丝点击